明らかに、両方の結合列に重複する値があります。デカルト積の代わりに、[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レポートを使用しています。