[英]Join 3 tables in SQLite database
我在 SQLite 數據庫中有 3 個表:
歌曲:
_id | name | length | artist_id (foreign key) | album_id (foreign key)
藝術家:
_id | name
專輯:
_id | name
我需要一個由以下列組成的表的查詢(在 Android 應用程序中使用它):
_id | name | length | artist_id | artist_name | album_id | album_name
但是,我編寫了以下查詢語句:
SELECT Songs._id, Songs.name, Songs.length, Songs.artist_id, Artists.name, Songs.album_id, Albums.name FROM Songs, Artists, Albums WHERE Songs.artist_id = Artists._id AND Songs.album_id = Albums._id
但它給了我一張空桌子。 我嘗試了OR
而不是AND
並且它給出了錯誤的結果(每個專輯中的每首歌都重復,盡管藝術家是正確的)。 如何修復我的查詢語句以將 3 個表連接到一個表中?
使用顯式JOIN
而不是隱式JOIN
,以下應該得到您想要的,盡管很奇怪您的隱式連接語法首先沒有返回正確的結果。 我使用了LEFT JOIN
來說明沒有關聯藝術家或專輯的歌曲,但這對於您的數據集可能不是必需的,可以使用INNER JOIN
代替。
我還添加了列別名以消除在獲取行時的歧義,因為您在大多數表( id, name
)中都有相似的列名。
SELECT
Songs._id AS song_id,
Songs.name AS song_name,
Songs.length,
Songs.artist_id AS artist_id,
Artists.name AS artist_name,
Songs.album_id AS album_id,
Albums.name AS album_name
FROM
Songs
LEFT JOIN Artists ON Songs.artist_id = Artists._id
LEFT JOIN Albums ON Songs.album_id = Albums._id
試試這個選擇,在可能Artists
比其他人更重要,所以在Songs
來低谷Artists
和Albums
的Songs
。
SELECT
Songs._id AS song_id,
Songs.name AS song_name,
Songs.length,
Songs.artist_id AS artist_id,
Artists.name AS artist_name,
Songs.album_id AS album_id,
Albums.name AS album_name
FROM
Artists
LEFT JOIN Songs ON Songs.artist_id = Artists._id
LEFT JOIN Albums ON Songs.album_id = Albums._id
此外,如果Songs
沒有屬於特定藝術家的條目,或者Albums
沒有屬於特定歌曲的條目,由於LEFT JOIN
,您仍然會獲得藝術家條目。 如果您只想返回帶有歌曲和專輯的藝術家,請改用JOIN
。
嘗試 sql 內連接
inner join Artists on Songs.artist_id = Artists._id
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.