簡體   English   中英

在 SQLite 數據庫中加入 3 個表

[英]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來低谷ArtistsAlbumsSongs

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM