我正在尝试加入一个具有布尔列的表,在我的结果中,我试图从连接中获取两列,一个是布尔值为 0,另一个是 1。
由于存在一对多关系,因此我需要进行 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...
我不明白的是为什么流派值被分组在一起,而不是像第一个查询那样在它们各自的列中。