私の質問は LEFT JOINの制限 によく似ていますが、バリエーションがあります。
テーブルSHOPと別のテーブルLOCATIONがあると仮定します。場所は、SHOPテーブルの一種の子テーブルであり、2つの対象列があります。1つは部門キー(単にKEYと呼ばれる)と「SHOP」番号です。これは、表SHOPの番号「NO」と一致します。
私はこの左外部結合を試しました:
SELECT S.NO, L.KEY
FROM SHOP S
LEFT OUTER JOIN LOCATN L ON S.NO = L.SHOP
しかし、1つのショップに属する場所はたくさんあるため、重複が多くなっています。それらを削除し、重複しない「ショップ、キー」エントリのリストを取得するだけです。
データは正しいが、重複は次のように表示されます。
SHOP KEY
1 XXX
1 XXX
2 YYY
3 ZZZ
3 ZZZ etc.
代わりに、データを次のように表示したいと思います。
SHOP KEY
1 XXX
2 YYY
3 ZZZ etc.
SHOPテーブル:
NO
1
2
3
LOCATIONテーブル:
LOCATION SHOP KEY
L-1 1 XXX
L-2 1 XXX
L-3 2 YYY
L-4 3 YYY
L-5 3 YYY
(Oracle 10gデータベース)
「S.No」と「L.KEY」でグループ化する必要があります
SELECT S.NO, L.KEY
FROM SHOP S
LEFT OUTER JOIN LOCATN L
ON S.NO = L.SHOP
GROUP BY S.NO, L.KEY
[〜#〜] edit [〜#〜]シナリオの更新を追跡する
簡単なサブクエリでこれを実行できるはずだと思います(ただし、Oracleデータベースに対してこれをテストしたことはありません)。次のようなもの
UPDATE shop s
SET divnkey = (SELECT DISTINCT L.KEY FROM LOCATN L WHERE S.NO = L.SHOP)
上記は、複数の部門にある場所に店舗が関連付けられている場合にエラーを発生させます。
この可能性を単に無視し、そのイベントで任意のものを選択したい場合は、使用できます
UPDATE shop s
SET divnkey = (SELECT MAX(L.KEY) FROM LOCATN L WHERE S.NO = L.SHOP)