2013-05-09 51 views
0

我有這個疑問如何正確地做一個選擇在一個多到多臺關係

SELECT f.id_film, title, year, GROUP_CONCAT(actor SEPARATOR '|') AS 'actors', 
GROUP_CONCAT(director SEPARATOR '|') AS 'directors' 
FROM film f JOIN middle m ON f.id_film = m.id_film 
JOIN actors a ON m.id_name = a.id_actor 
JOIN directors d ON m.id_name = d.id_director 
WHERE id_category = "com" GROUP BY f.id_film 

應該收集從表演員和導演表名。中間表實際上是兩個表格之間的「細木工」,並使用「a」或「d」值的列「type」來區分。我無法正確地將演員與導演分開,這意味着查詢會返回所有ID,而不管類型。我已嘗試子查詢沒有成功。任何建議,將不勝感激。由於

回答

0

我認爲你缺少包括中間表的「類型」字段進行比較,而加入到演員和導演表,

嘗試以下:

SELECT f.id_film, title, year, GROUP_CONCAT(actor SEPARATOR '|') AS 'actors', 
GROUP_CONCAT(director SEPARATOR '|') AS 'directors' 
FROM film f JOIN middle m ON f.id_film = m.id_film 
LEFT JOIN actors a ON m.id_name = a.id_actor AND m.type = 'a' 
LEFT JOIN directors d ON m.id_name = d.id_director AND m.type = 'd' 
WHERE id_category = "com" GROUP BY f.id_film 

@邁克爾見SqlFiddle,您需要放置數據庫模式語句並在左側插入示例數據語句,並且可以在您的問題中提供鏈接和預期輸出,以便我們可以嘗試使用示例數據的解決方案。

+0

我已經做到了,並返回零行 – michael 2013-05-09 09:56:46

+0

@michael你可以用你的數據庫結構和示例數據創建SqlFiddle,這將有助於他人理解和嘗試解決方案。謝謝 – Minesh 2013-05-09 10:02:46

+0

對不起,我不知道SqlFiddle是什麼,如果你向我解釋,我會做 – michael 2013-05-09 10:08:33

相關問題