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つのテーブルを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
sql inner joinを試してください
inner join Artists on Songs.artist_id = Artists._id