我有一个包含两列的表,即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中。
非常感谢!
答案 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;
<强>输出:强>
在这里演示:
答案 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)