0

私のデータベースには、次の列がある課題テーブルがあります: Challenge_Name, Challenge_Description. という 2 番目のテーブルがあり、completed_challenges_junction次の列がありますMember_Name, Challenge_Name。チャレンジ テーブルのすべてのチャレンジ名と、completed_challenges_junction. 一致するものがない場合は、表示したいと思いますNULL。私は自分の SQL コードを機能させることにかなり近づいていると思います。これが現在のコードです。

SELECT challenges.Challenge_Name, challenges.Challenge_Description, completed_challenges_junction.Member_Names 
FROM challenges 
LEFT JOIN completed_challenges_junction ON challenges.Challenge_Name=completed_challenges_junction.Challenge_Name

これは機能しますが、別のメンバーの重複したエントリももたらします。私がそれを使用するWHERE Member_Name='testmember'と、すべての s を表示する必要があるときにのみ、メンバーのエントリが表示されますChallenge_Name

4

3 に答える 3

0
SELECT
    A.Challenge_Name,A.Challenge_Description,
    GROUP_CONCAT(IFNULL(B.Member_Names,'')) Member_Names
FROM
    challenges A
    LEFT JOIN completed_challenges_junction B ON
    A.Challenge_Name=B.Challenge_Name AND
    A.Challenge_Description=B.Challenge_Description
GROUP BY
    A.Challenge_Name,A.Challenge_Description
;

また

SELECT
    A.Challenge_Name,A.Challenge_Description,
    GROUP_CONCAT(IFNULL(B.Member_Names,'')) Member_Names
FROM
    challenges A
    LEFT JOIN completed_challenges_junction B
    USING (Challenge_Name,Challenge_Description)
GROUP BY
    A.Challenge_Name,A.Challenge_Description
;
于 2013-01-29T22:28:22.933 に答える
0

このような条件にWHERE句を追加できますON

SELECT challenges.Challenge_Name, challenges.Challenge_Description, completed_challenges_junction.Member_Names 
FROM challenges 
LEFT JOIN completed_challenges_junction ON (
  challenges.Challenge_Name=completed_challenges_junction.Challenge_Name
  AND Member_Name='testmember'
)

この方法では、testmemberエントリのみが completed_challanges_junction から表示されますが、すべての課題が表示されます。

于 2013-01-29T22:28:33.877 に答える
0

あなたが何を望んでいるのか正確にはわかりませんが、「group by」句とgroup_concat関数を探しているかもしれません:

SELECT challenges.Challenge_Name, challenges.Challenge_Description,
    GROUP_CONCAT(completed_challenges_junction.Member_Names SEPARATOR ', ')
FROM challenges 
LEFT JOIN completed_challenges_junction
    ON challenges.Challenge_Name=completed_challenges_junction.Challenge_Name
GROUP BY challenges.Challenge_Name

このクエリは、各 Challenge_Name が 1 回だけ出現する結果を返します。

于 2013-01-29T22:29:29.280 に答える