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

使用するJOINの種類

    明らかに、両方の結合列に重複する値があります。デカルト積の代わりに、[INNER] JOIN このために作成する場合は、各行を1回だけ使用する必要があります。 。これは、行番号(rn)を追加することで実現できます。 )複製ごとにrnに参加します さらに。

    追加の制限(FK制約など)が設定されていない限り、各テーブルには、他のテーブルよりも同じ値に対して多かれ少なかれ重複を含めることができますが、質問には何もありません。 すべてを維持するには FULL [OUTER] JOINを使用する行 。ただし、結果に10000レコードを保持する必要があります。これは、table2のカーディナリティです。 。したがって、 LEFT [OUTER] JOINである必要があります table1で (40行)-table1から過剰な行の可能性を除外します 。

    SELECT t1."LocationArea", t2."Location"
    FROM  (
       SELECT "Location"
            , row_number() OVER (PARTITION BY "Location") AS rn
       FROM   table2
       ) t2
    LEFT JOIN (
       SELECT "LocationArea"
            , row_number() OVER (PARTITION BY "LocationArea") AS rn
       FROM   table1
       ) t1 ON t1."LocationArea" = t2."Location"
           AND t1.rn = t2.rn;
    

    PostgresまたはSQLServerで動作します。 MySQLはウィンドウ関数をサポートしていません。代わりの機能が必要です:

    • 制限なしのSQLSELECT最後のエントリ

    明確にするために:LEFT JOIN LEFT OUTER JOINの省略形です。 、したがって、すでに外部結合を使用しています。あなたの発言は誤解です :

    外部結合をサポートしていないZOHOレポートを使用しています。



    1. SQL * Plusが終了時にコミットするのはなぜですか?

    2. Oracleデータベースからランダムにレコードを取得するにはどうすればよいですか?

    3. IDENT_CURRENT()を使用して、SQLServerのID列の現在のID値を返します

    4. 何回も何回も!データモデルでの定期的なイベントの管理