我正在努力工作几个小时似乎很容易,但我无法让它工作或在谷歌找到类似的东西。
我有2张桌子
images
和
tags
它们具有多对多的关系,因此我有另一个名为image_tag
我试图获得的是选择所有具有tag_id = 4和tag_id = 1的图像
我的第一次尝试是这样的:
SELECT * from images as a INNER JOIN
image_tag as b on a.id=b.image_id
WHERE b.tag_id=4 and b.tag_id=1
当我不能直接使用AND条件转动时,这给了我0结果。
之后我尝试了这个:
SELECT * FROM images as a
INNER JOIN image_tag as b on a.id=b.image_id
WHERE b.tag_id IN (1,4)
这会返回 tag_id=1
或tag_id=4
尝试过的所有图片内部加入相同的数据透视表,但无论如何都无法使其工作
答案 0 :(得分:3)
使用group by
和having
让所有image_id符合条件,并使用join
的结果ID。
SELECT a.*
FROM images as a
INNER JOIN (select image_id
from image_tag
where tag_id IN (1,4)
group by image_id
having count(distinct tag_id)=2
) b on a.id=b.image_id
答案 1 :(得分:0)
只需使用table image_tag即可完成此操作。您必须自己加入才能获得所有组合。这样,您就可以选择具有两个标记的行。
SELECT a.image_id
FROM image_tag as a
inner join image_tag as b on a.image_id=b.image_id
where a.tag_id=4 and b.tag_id=1