ブール列を持つテーブルを結合しようとしています。私の結果では、結合から 2 つの列を取得しようとしています。1 つはブール値が 0 で、もう 1 つは 1 です。
1 対多の関係があるため、GROUP BY を実行する必要があります。
次のクエリは、GROUP BY 以外の正しい結果を返します。
プロファイル ID ごとに、ジャンルと影響力の両方について少なくとも 1 つの行があります。
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
上記は、gpro.isInfluence 値に基づいて分割されるのではなく、すべての g.genreName 行をいずれかの列にグループ化します。結果が該当する列は、グループ化された最初の結果に対応すると思います。
1000001052 Latin American,Rock,Hip Hop NULL
1000001637 NULL Electronic,Easy listening,Asian,popgun
1000001666 NULL Electronic,Bacon,Emo,Modern folk,Hip Hop,R...
私が理解できないのは、最初のクエリのように、ジャンルの値がグループ化され、それぞれの列に含まれていない理由です。