使用条件请求加入2或3个MySQL表

时间:2012-10-23 01:34:28

标签: mysql

我有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,以获得艺术家信息?

2 个答案:

答案 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);