小编典典

在SQLite数据库中联接3个表

sql

我在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个表联接到一个表中?


阅读 191

收藏
2021-04-15

共1个答案

小编典典

使用显式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
2021-04-15