2011-02-23 60 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