sql >> データベース >  >> RDS >> Mysql

フィールドがnullの可能性がある場合に、3つのテーブルで結合を使用する

    INNER JOINを実行していますが、OUTER JOIN、特にLEFTJOINが必要です。 LEFT JOINを使用すると、「左側」のテーブルは常に結合され、対応がない場合は、右側のテーブルのフィールドがnullに設定されます。この違いは、このwikipediaページ で非常によく説明されています。 。

    次に、同じ送信IDで行をグループ化し、グループ化された行数をカウントする必要があります。一方の送信にコメントが1つだけあり、もう一方にコメントがない場合は、両方に1つのグループ化された行があることに注意してください...1つの送信にコメントがない場合、次のクエリでc.submissionid nullになるので、

    あなたのSQLは

    SELECT s.loginid, s.title, s.url, s.displayurl, l.username, c.submissionid, 
    IF(c.submissionid IS NULL, 0, COUNT(*))  AS countComments
    FROM submission AS s
    INNER JOIN login AS l ON l.loginid = s.loginid
    LEFT JOIN comments AS c ON c.submissionid = s.id
    GROUP BY (s.id)
    ORDER BY s.datesubmitted DESC
    LIMIT 10
    

    エラーが発生する可能性があります。クエリはテストしていません...しかし、正しいアイデア、つまり外部結合と内部結合の違いをお伝えしたいと思います。



    1. SET変数ステートメントを使用したMysqliクエリ(つまり、複数のクエリ)

    2. SQL:UNIONを使用して、特定の選択で並べ替える方法は?

    3. Laravelで座標距離を計算する

    4. 最も難しい質問のヘルプのための最高のSQLServerパフォーマンスフォーラム