我遇到 SQL 查询问题...我有 3 个表(图像、标签、Image_Tag):
图片
Image_ID | Image_Path
1 img1.png
2 img2.png
3 img3.png
标签
Tag_ID | Name
1 Tag 1
2 Tag 2
3 Tag 3
Image_Tag
Image_ID | Tag_ID
1 2
2 3
3 1
3 2
如您所见,第三张图片有两个标签:Tag1 和 Tag2。我想创建一个查询来选择具有所有传递标签的图像。
例如,如果我提供标签 2,我会收到图像 #1 和 #3,但如果我添加标签 1,我只会收到图像 #3。
我尝试使用 IN 条件,但它返回了与标签匹配的所有结果。
你有什么想法吗?谢谢。
最佳答案
SELECT DISTINCT a.*
FROM Images a
INNER JOIN Image_Tag b
ON a.Image_ID = b.Image_ID
INNER JOIN Tags c
ON b.Tag_ID = c.Tag_ID
WHERE c.Name IN ('Tag2')
要进一步了解有关联接的更多知识,请访问以下链接:
更新1
SELECT a.*
FROM Images a
INNER JOIN Image_Tag b
ON a.Image_ID = b.Image_ID
INNER JOIN Tags c
ON b.Tag_ID = c.Tag_ID
WHERE c.Name IN ('Tag1','Tag2')
GROUP BY a.Image_ID, a.Image_Path
HAVING COUNT(*) = 2
关于mysql - SQL中的很多条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15182716/