我有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
,以获得艺术家信息?
答案 0 :(得分:1)
如果我理解正确,您希望在曲目没有相册的情况下显示艺术家信息。您可以在CASE
声明中使用SELECT
填写信息或SELECT
其他一些信息。
SELECT col1, col2, ..., CASE
WHEN track.album_id IS NULL # or = 0
THEN 'Artist Info'
ELSE track.album_id
AS coln
FROM track
...
另外,请始终使用列列表
答案 1 :(得分:-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
但是,我不明白为什么你在track.album_id
中使用0来表示没有专辑。这告诉我你没有使用外键约束,因为如果你是,那么约束会在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);