1

我有 3 张桌子:

追踪:

id, title, artist_id, album_id, description, cover

艺术家:

id, name, bio

专辑:

id, title, description, artist_id, cover

我实际上有这个要求:

SELECT * FROM `track`
LEFT JOIN album ON track.album_id=album.id
LEFT JOIN artist ON album.artist_id=artist.id

但是,如果曲目没有专辑,我怎么能track.album_id = 0加入那个条件来获得艺术家信息?LEFT JOIN artist ON track.artist_id=artist.id

4

2 回答 2

1

如果我理解正确,如果曲目没有专辑,您希望显示艺术家信息。您可以CASE在您的SELECT报表中使用 a 来填写信息或SELECT其他一些信息。

SELECT col1, col2, ..., CASE
    WHEN track.album_id IS NULL # or = 0
        THEN 'Artist Info'
    ELSE track.album_id
    AS coln
FROM track
...

此外,始终使用列列表

于 2012-10-23T01:49:16.170 回答
-1

我可能会尝试

SELECT * FROM
(SELECT * FROM `track`
LEFT JOIN album ON track.album_id=album.id
LEFT JOIN artist ON album.artist_id=artist.id) WHERE album.id IS NULL

但是,我不明白您为什么使用 0 intrack.album_id表示没有专辑。这告诉我你没有使用外键约束,因为如果你使用了,约束将在track.album_id= 0 处失败。我建议运行这个:

UPDATE track SET album_id = NULL where album_id = 0;
ALTER TABLE track ADD FOREIGN KEY album_id REFERENCES album (id);
于 2012-10-23T01:49:08.323 回答