我可能缺少明显的东西,但是我需要一个查询,该查询仅返回与同一列上的多个条件匹配的记录。

该表是一个简单的链接表,该链接表将标签链接到照片,即一个标签可以应用于多张照片,而一张照片可以具有多个标签。

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 INGROUP BYHAVING 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/

10-13 02:52