Как не дублировать столбцы без дочерних элементов при объединении «многие ко многим» в Oracle? - PullRequest
0 голосов
/ 23 мая 2018

Наличие двух таблиц для многих ко многим A, B. Предложение where возвращает две строки из таблицы A. Первая имеет два дочерних элемента, вторая - ноль.После левого соединения запрос таблицы B возвращает четыре строки: первая дублируется из-за дочерних, вторая также дублируется.Можно ли избежать дублирования второй записи?

SELECT ID, CODE FROM A;
1, 1
2, 2

SELECT ID, CODE, DEPARTMENT FROM A LEFT JOIN B ON A.ID = B.ID

1, 1, DEP1
2, 2, NULL
1, 1, DEP2
2, 2, NULL

Ищите:

1, 1, DEP1
1, 1, DEP2
2, 2, NULL

1 Ответ

0 голосов
/ 23 мая 2018

Ваша конкретная проблема может быть решена путем применения DISTINCT:

SELECT DISTINCT ID, CODE, DEPARTMENT FROM A LEFT JOIN B ON A.ID = B.ID

Обратите внимание, что она работает для вашего конкретного запроса, но может удалитьслишком много строк, когда ваш запрос становится более сложным.Другой вариант:

SELECT ID, CODE, DEPARTMENT 
FROM A 
LEFT JOIN (SELECT DISTINCT ID, DEPARTMENT FROM B) B ON A.ID = B.ID

Но я подозреваю, что у вас есть проблема с моделированием данных, так как вам, вероятно, не нужно иметь эти дубликаты записей для ID = 2 в таблице B.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...