我可能缺少明显的东西,但是我需要一个查询,该查询仅返回与同一列上的多个条件匹配的记录。
该表是一个简单的链接表,该链接表将标签链接到照片,即一个标签可以应用于多张照片,而一张照片可以具有多个标签。
photoid | tagid
----------------
343 | 2
343 | 5
343 | 8
522 | 5
522 | 1
522 | 10
522 | 8
118 | 8
118 | 5
etc...
如图所示,光子343具有3个标签。
现在,我需要的是一个查询,该查询为我提供了所有具有特定标签的照片的photoid。这些照片应具有tagid 1或tagid 2,并且应具有tagid 5和tagid 8,但不得具有tagid 10。
即就像是
(tagid=1 OR tagid=2) AND (tagid=5 AND tagid=8) AND tagid!=10
。在上面的示例中,只有343个匹配。
我尝试将
WHERE IN
与GROUP BY
和HAVING COUNT
SELECT PhotoTags.photoid, FROM PhotoTags
WHERE (PhotoTags.tagid) IN ((5),(8)) AND (PhotoTags.tagid) NOT IN (10)
GROUP BY PhotoTags.photoid
HAVING count(distinct PhotoTags.tagid)=2
这只是工作的一部分,它为我提供了与tagid 5和8匹配但与10匹配的所有照片。如何将
AND (tagid=1 OR tagid=2)
条件添加到查询中? 最佳答案
如果你这样做
WHERE (PhotoTags.tagid) IN ((5),(8)) AND (PhotoTags.tagid) NOT IN (10)
不会考虑此AND,因为已经在检查tagId是否为5或8
AND (PhotoTags.tagid) NOT IN (10)
IN只能使用逗号分隔的值来完成,请记住AND优先于OR,请尝试执行此操作并检查其是否为您提供所需的结果,它将仅选择5或8或1或2的标记
SELECT PhotoTags.photoid, FROM PhotoTags
WHERE (PhotoTags.tagid) IN (5,8,1,2)
GROUP BY PhotoTags.photoid
HAVING count(distinct PhotoTags.tagid)=2
关于mysql - SELECT匹配多个WHERE条件(来自链接表),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42375157/