2012-09-21 45 views
0

爲此提出正確的標題有點具有挑戰性。Mysql一對多連接返回所有記錄

所以我有一個用戶配置文件表,一個音樂流派表,genre_profiles表爲一對多關聯。下面我有一個group_concat返回一個配置文件的所有genreName,但有一個問題。我想回到所有的個人資料,甚至當我過濾特定類型像genreID 15

SELECT *, group_concat(cast(g.genreName as char) SEPARATOR ', ') as genreName 
FROM profiles p 
LEFT OUTER JOIN genre_profiles gpro ON gpro.profileID = p.profileID 
LEFT OUTER JOIN genres g ON g.genreID = gpro.genreID 
WHERE gpro.genreID = '15' 
GROUP BY p.profileID 

如何去篩選我查詢了genreID留下與完整的個人資料相關聯的genreNames流派?我應該爲profileID爲15的所有配置文件做一個子查詢,然後從中獲取所有流派數據?

謝謝!

回答

0

所以我認爲這解決了我的問題。

SELECT * , GROUP_CONCAT(CAST(g.genreName AS CHAR) SEPARATOR ', ') AS genreName 
FROM profiles p 
LEFT OUTER JOIN genre_profiles gpro ON gpro.profileID = p.profileID 
LEFT OUTER JOIN genres g ON g.genreID = gpro.genreID 
WHERE gpro.isInfluence = '0' 
AND p.profileID IN 
(SELECT gp.profileID 
FROM genre_profiles gp 
WHERE genreID = 10) 
GROUP BY p.profileID 

它適用於我所有的測試用例。

0

我想你會想把AND gpro.genreID = '15'JOIN移到WHERE(雖然我不是100%確定我在讀你的權利)。

+0

抱歉,由於我刪除了一些不必要的查詢代碼,因此我將其粘貼錯誤。 – bikedorkseattle