forumposters
Programmer
The following query seems to work, but I'm not sure it's the best way to do this. Is there a better way to write this SQL statement? Is there another query that does the same thing, but is shorter and is better form?
SELECT j.jobid
FROM Job j
JOIN Image i
ON j.jobid = i.jobid
JOIN ImageTag it
ON it.ImageID = i.ImageID
JOIN Tag t
ON t.tagid = it.tagid
JOIN TagCat tc
ON tc.tagcatid = t.tagcatid
AND it.tagid IN (<cfqueryparam value="#arguments.TagIDList#" cfsqltype="cf_sql_integer" list="yes"/>)
WHERE i.DisplayImage = 'True'
GROUP
BY j.jobid
HAVING COUNT(distinct tc.TagCatID) >= (SELECT Count(DISTINCT t.tagcatid)
FROM tagcat tc, tag t
WHERE tc.TagCatID = t.TagCatID
AND t.tagid IN
(<cfqueryparam value="#arguments.TagIDList#" cfsqltype="cf_sql_integer" list="yes"/>)
)
SELECT j.jobid
FROM Job j
JOIN Image i
ON j.jobid = i.jobid
JOIN ImageTag it
ON it.ImageID = i.ImageID
JOIN Tag t
ON t.tagid = it.tagid
JOIN TagCat tc
ON tc.tagcatid = t.tagcatid
AND it.tagid IN (<cfqueryparam value="#arguments.TagIDList#" cfsqltype="cf_sql_integer" list="yes"/>)
WHERE i.DisplayImage = 'True'
GROUP
BY j.jobid
HAVING COUNT(distinct tc.TagCatID) >= (SELECT Count(DISTINCT t.tagcatid)
FROM tagcat tc, tag t
WHERE tc.TagCatID = t.TagCatID
AND t.tagid IN
(<cfqueryparam value="#arguments.TagIDList#" cfsqltype="cf_sql_integer" list="yes"/>)
)