2012-10-23 30 views
1

我有3個表:加入2分或3 MySQL表用條件請求

軌跡:

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使conditionnale加入LEFT JOIN artist ON track.artist_id=artist.id,如果曲目沒有專輯,就有藝術家信息?

+1

你試過運行此查詢?如果我正確理解你的問題,使用''LEFT JOIN'就像你說你正在做的那樣,正是你所要求的,所以你的查詢應該是正常的。 – Jasper

+0

沒有,我想什麼是: SELECT * FROM'track' 如果(track.album_id> 0){ LEFT JOIN專輯ON track.album_id = album.id LEFT JOIN藝術家ON album.artist_id =藝術家。編號 } 其他 { LEFT JOIN artist ON track.artist_id = artist.id } –

回答

-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); 
+0

我是一個mysql noob,我也許用我的腳製作我的數據庫,但它是個人測試。我有一個SQL錯誤與您請求 –

1

如果我理解正確的話,你想擁有如果曲目沒有專輯,則顯示藝術家信息。您可以在您的SELECT聲明中使用CASE填寫信息或SELECT其他一些信息。

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

而且,總是用一個列清單

+0

也許我不明白,但不可能得到一個有效的請求 –