Удалите дубликаты из ЛЕВОГО ВНЕШНЕГО ОБЪЕДИНЕНИЯ

Мой вопрос весьма схож с Ограничением ЛЕВОГО СОЕДИНЕНИЯ с изменением.

Принятие у меня есть таблица 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)

19
задан Community 23 May 2017 в 11:54
поделиться

2 ответа

Вам нужно 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
25
ответ дан 30 November 2019 в 03:28
поделиться

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)
7
ответ дан 30 November 2019 в 03:28
поделиться
Другие вопросы по тегам:

Похожие вопросы: