用于查找没有特定值的所有记录的SQL查询

时间:2017-03-28 07:28:37

标签: sql

我有一个包含两列的表,即albumID和photoID。

如何返回不在albumID中的所有photoID的列?

例如,假设我有这张桌子,我想查找不在专辑0中的所有photoID。

|albumID|photoID|  
|0      |0      |  
|0      |1      |  
|1      |0      |  
|1      |2      |  
|1      |3      |  

然后,我只想显示照片2和3。 现在,我只有这个问题:

SELECT DISTINCT photoID FROM PhotoInAlbum WHERE AlbumID <> 1

返回照片0,2,3,但0出现在专辑0中。

非常感谢!

4 个答案:

答案 0 :(得分:3)

SELECT DISTINCT photoID FROM PhotoInAlbum WHERE photoID NOT IN
(
SELECT photoID from PhotoInAlbum WHERE AlbumID = 0
)

使用subquery

答案 1 :(得分:1)

你也可以使用自我左连接来解决这个问题。同样返回每张照片所属的专辑似乎也是有意义的。如果您真的只想要照片ID,那么您可以将我的选择替换为SELECT DISTINCT p1.photoID

SELECT p1.albumID, p1.photoID, p2.photoID
FROM PhotoInAlbum p1
LEFT JOIN PhotoInAlbum p2
    ON p1.photoID = p2.photoID AND p2.albumID = 0
WHERE p2.photoID IS NULL;

<强>输出:

enter image description here

在这里演示:

Rextester

答案 2 :(得分:1)

显然,照片可以在表格中多次出现,但您想获得一张照片列表(那些不在专辑0中的照片),您可能不希望列出的照片超过一旦。因此,使用GROUP BY汇总您的行,以便为每张照片获取一行。使用HAVING限制结果,以便仅保留不在专辑0中的结果。

select photoID
from PhotoInAlbum 
group by photoID
having count(case when albumID = 0 then 1 end) = 0;

答案 3 :(得分:0)

使用子查询

SELECT DISTINCT photoID FROM PhotoInAlbum WHERE photoID NOT IN (SELECT albumID FROM PhotoInAlbum)