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

SQL 結合形式 - ネストされた内部結合

    読みやすくするために、クエリを再構築しました...明らかに最上位レベルのTable1から始めて、Table3に結び付け、次にtable3をtable2に結び付けます。関係の連鎖をたどると、ずっとたどりやすくなります。

    さて、あなたの質問に答えます。デカルト積の結果として、大きなカウントを取得しています。 Table3 に一致する Table1 の各レコードに対して、X * Y が得られます。次に、table3 と Table2 の間の一致ごとに同じ影響があります... Y * Z... したがって、テーブル 1 の 1 つの可能な ID の結果X * Y * Z レコードを持つことができます。

    これは、テーブルの正規化またはコンテンツがどのようになっているかわからないことに基づいています...キーが主キーであるかどうか..

    Ex:
    Table 1       
    DiffKey    Other Val
    1          X
    1          Y
    1          Z
    
    Table 3
    DiffKey   Key    Key2  Tbl3 Other
    1         2      6     V
    1         2      6     X
    1         2      6     Y
    1         2      6     Z
    
    Table 2
    Key    Key2   Other Val
    2      6      a
    2      6      b
    2      6      c
    2      6      d
    2      6      e
    

    そのため、テーブル 1 をテーブル 3 に結合すると、(このシナリオでは) 12 のレコードが生成されます (それぞれが 1 で、それぞれが 3 で結合されます)。次に、テーブル 2 内の一致した各レコード (5 レコード) のすべてを繰り返します... 合計 60 ( 3 tbl1 * 4 tbl3 * 5 tbl2 ) カウントが返されます。

    さて、それを取り上げて、何千もの記録に基づいて拡張すると、混乱した構造が牛を窒息させ (いわば) パフォーマンスを低下させる可能性があることがわかります.

    SELECT
          COUNT(*)
       FROM
          Table1 
             INNER JOIN Table3
                ON Table1.DifferentKey = Table3.DifferentKey
                INNER JOIN Table2
                   ON Table3.Key =Table2.Key
                   AND Table3.Key2 = Table2.Key2 
    


    1. DatabaseError:pandas.io.sql.to_sql()を使用すると、「文字列のフォーマット中にすべての引数が変換されるわけではありません」

    2. ナンバーシリーズジェネレータチャレンジソリューション–パート3

    3. MYSQLでシリアル化データの内部を検索

    4. now()関数に6時間を追加