使用和条件从数据透视表中选择

时间:2018-04-27 22:24:02

标签: mysql sql

我正在努力工作几个小时似乎很容易,但我无法让它工作或在谷歌找到类似的东西。

我有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=1tag_id=4尝试过的所有图片内部加入相同的数据透视表,但无论如何都无法使其工作

编辑:添加sql小提琴。 http://sqlfiddle.com/#!9/1726b0/1结果应该是带有ID 4,5,6,7

的图像

2 个答案:

答案 0 :(得分:3)

使用group byhaving让所有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