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