排除一个表中的重复值并返回剩余的值

时间:2015-04-09 19:09:05

标签: mysql

我有一张这样的表:

table: album_image(album_id, image_id)

album_id    image_id
----------------------------
87          2326
87          2325
86          2325
85          5689
89          56

拥有2个专辑ID(比方说87和86),我想只提取不在这2张专辑中的image_id。

所以,例如,如果我有album_id 87和86,它应该返回image_id:2326

我如何进行查询?

3 个答案:

答案 0 :(得分:1)

不在运算符中的版本(在mysql中不存在减运算符来执行此类操作):

select image_id from album_image
where album_id = 86
      and image_id not in (select image_id 
                                 from album_image 
                                 where album_id = 87)
union
select image_id from album_image
where album_id = 87
      and image_id not in (select image_id 
                                 from album_image 
                                 where album_id = 86)

也可以使用外连接。

答案 1 :(得分:1)

根据要求,我们需要找到在album_id 86或87上但不能同时在两者上的图片,这可以使用group byhaving count

来完成
select 
image_id from album_image 
where album_id in (87,86) 
group by image_id having count(*)=1 ;

答案 2 :(得分:0)

select image_id from album_image where album_id not in (86, 87)