我在SQLite数据库中有3个表:
歌曲:
_id | name | length | artist_id (foreign key) | album_id (foreign key)
艺术家:
_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个表联接到一个表中?
OR
AND
使用显式JOIN而不是隐式的语法,以下内容应该可以满足您的要求,尽管很好奇您的隐式联接语法最初没有返回正确的结果。我使用LEFT JOIN来说明没有相关艺术家或专辑的歌曲,但是对于您的数据集而言可能不是必需的,而INNER JOIN可以使用来代替。
JOIN
LEFT JOIN
INNER JOIN
我还添加了列别名以消除获取行时的歧义,因为大多数表(id, name)中的列名都相似。
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