1
我想要加入一個具有布爾列的表,並且在我的結果中,我試圖從連接中獲取兩列,其中布爾值爲0,在哪裏它是1.MySQL GROUP BY上的SELECT If語句
由於有一對多的關係,我需要做一個GROUP BY。
以下查詢返回正確的非GROUP BY結果。
對於每個配置文件ID,至少有一行用於流派和影響力。
SELECT p.profileID, IF(gpro.isInfluence =0, g.genreName, NULL) AS genre, IF(gpro.isInfluence =1, g.genreName, NULL) AS influence, g.genreName
FROM profiles p
LEFT JOIN genre_profiles gpro ON gpro.profileID = p.profileID
LEFT JOIN genres g ON g.genreID = gpro.genreID
WHERE g.genreName IS NOT NULL
但是,當我做相應的GROUP BY/GROUP_CONCAT輸出沒有意義。
SELECT p.profileID, IF(gpro.isInfluence =0, GROUP_CONCAT(g.genreName) , NULL) AS genre, IF(gpro.isInfluence =1, GROUP_CONCAT(g.genreName) , NULL) AS influence, g.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 g.genreName IS NOT NULL
GROUP BY p.profileID
上述基團的所有的行g.genreName在任一列的,而不是將它們被分裂基於所述gpro.isInfluence值。結果落在我認爲對應於分組的第一個結果的列。
1000001052 Latin American,Rock,Hip Hop NULL
1000001637 NULL Electronic,Easy listening,Asian,popgun
1000001666 NULL Electronic,Bacon,Emo,Modern folk,Hip Hop,R...
我不明白的是爲什麼流派值被分組在一起,而不是像第一個查詢那樣在各自的列中。
你會很好地提供你的表結構,如果可能的話,SQLFiddle(http://sqlfiddle.com/) – LSerni
也許你用錯誤的方式使用了group_concat –
我會做幾個小提琴。我忽略了完整的結構,所以它不會太複雜。 – bikedorkseattle