在SQLite 3中选择跨表的引用的行

时间:2011-02-23 14:26:35

标签: sql sqlite

我有一个包含3个表的SQLite照片/相册数据库:

相册

 id   name           hide
--------------------------
 1    Holiday 2010   1
 2    Day Trip       0

照片

 id   file
-----------------
 1    photo1.jpg
 2    photo2.jpg
 3    photo3.jpg
 4    photo4.jpg

关系(将照片与相册相关联)

 album   photo
-----------------
 1       1
 1       2
 2       3
 2       1

可以将照片分配到零个,一个或多个相册。每张专辑都有一个“隐藏”列,表示是否应该忽略此专辑的照片。

我正在尝试查找SELECT查询,该查询返回未分配给相册的所有照片+所有未隐藏的相册中的照片(即将其“隐藏”值设置为0)。< / p>

我想出了一个选择可见相册中的照片的查询,但我不知道如何包含未分配到相册的照片:

SELECT file 
FROM photos, albums, relation 
WHERE photos.id = relation.photo 
  AND albums.id = relation.album 
  AND albums.hide = 0

此查询返回:

photo1.jpg
photo3.jpg

但是,所需的结果是:

photo1.jpg
photo3.jpg
photo4.jpg

问题是photo4.jpg未分配给Relation表中的相册。你知道怎么解决这个问题吗?

非常感谢你的帮助!

1 个答案:

答案 0 :(得分:0)

您的第一个查询会重新审核照片1和3,因此我认为这是正确的。

因此,您可以加入并查找空值,因为这将没有要加入的相册。

SELECT file
FROM photos LEFT OUTER JOIN (relation join albums on relation.album = albums.id)
            ON relation.photo = photos.id
WHERE albums.hide = 0 OR albums.id IS NULL