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

複数の左結合を持つSQL重複行

    上記のクエリで全体的なファンアウトが発生しています。

    これは、

    があるために発生します
    • aaa間の1-1または1-N結合 &bbb
    • bbbの間には1-N結合があります &ccc

    後者の結合はMを作成します bbbに存在する行の重複 cccへの結合を介してM行に結合されている場合

    エラーを修正するには、クエリを2つのCTEに分割し、結果を結合します。

    WITH agg_bb AS (
    SELECT aa.id, sum(bb.count)
    FROM aaaa aa
    LEFT JOIN bbbb bb ON bb.aa_id = aa.id
    GROUP BY aa.id
    )
    , agg_cc AS (SELECT aa.id, count(DISTINCT cc.id)
    FROM aaaa aa
    LEFT JOIN bbbb bb ON bb.aa_id = aa.id
    LEFT JOIN cccc cc ON cc.bb_id = bb.id
    GROUP BY aa.id
    )
    SELECT * FROM agg_bb JOIN agg_cc USING (id)
    

    一般に、ファンアウトを回避するには、一連の結合の右端の関係から列にのみ集計操作を適用します。中央のテーブルから列を集約していることがわかった場合は、上記のようにクエリを分割します。ファンアウト全体で不変な関数は次の関数のみです:COUNT DISTINCTMINMAX




    1. MySQLはWindowsのどこにデータベースファイルを保存し、ファイルの名前は何ですか?

    2. SQLServerは日時からミリ秒を削除します

    3. PostgreSQLデータベースを別のデータベースにコピーします

    4. MySqlMySQLMembershipProviderの使用-autogenerateschema=trueが機能していませんか?