Мой вопрос весьма схож с Ограничением ЛЕВОГО СОЕДИНЕНИЯ с изменением.
Принятие у меня есть таблица SHOP и другая таблица LOCATION. Местоположение является своего рода дочерней таблицей таблицы SHOP, которая имеет два столбца интереса, каждый - Ключ Подразделения (вызов его просто КЛЮЧ) и номер "МАГАЗИНА". Это соответствует к Числу "НЕТ" в таблице SHOP.
Я попробовал это левое внешнее объединение:
SELECT S.NO, L.KEY
FROM SHOP S
LEFT OUTER JOIN LOCATN L ON S.NO = L.SHOP
но я получаю много дубликатов, так как существует много местоположений, которые принадлежат единственному магазину. Я хочу устранить их и просто получить список "магазина, ключевых" записей без дубликатов.
Данные корректны, но дубликаты появляются следующим образом:
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
(База данных 10 г Oracle)
Вам нужно GROUP BY '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)