2011-02-23 62 views
0

我有一个SQLite照片/相册数据库3个表:选择行与整个表的引用在SQLite的3

相册

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)。

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

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不如在关系表中签名到相册。你知道如何解决这个问题吗?

非常感谢您的帮助!

回答

0

您的查询的第一个retursn照片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