Двойное внешнее соединение SQL? - PullRequest
5 голосов
/ 13 октября 2009

У меня есть две таблицы A и B ... A и B могут быть объединены общим столбцом. A и B будут иметь несколько строк, которые совпадают в столбце соединения. Но у A есть строки, которых нет у B, а у B есть строки, которых нет у A.

ЛЕВОЕ ВНЕШНЕЕ СОЕДИНЕНИЕ от A до B даст все строки в A, заполнив NULLS для столбцов B, которые не могут быть сопоставлены. RIGHT OUTER JOIN дает все строки в B, заполняя NULLS для столбцов A, которые не могут быть сопоставлены.

Я хотел бы получить ВСЕ строки от A и B, возвращая при этом NULL для столбцов A в строках, которые находятся только в B, и NULL для столбцов B, которые находятся только в A.

Я знаю, что могу сделать это с UNION вместе с 1 INNER + 1 LEFT + 1 RIGHT, но есть ли один запрос SELECT, который может достичь этого?

Ответы [ 3 ]

12 голосов
/ 13 октября 2009

Вы можете использовать FULL OUTER JOIN для этого.

3 голосов
/ 13 октября 2009

Вы хотите полное внешнее соединение. Не пытайтесь делать это с UNIONS - есть некоторые очень сложные крайние случаи, и почти невозможно получить права.

Синтаксис здесь:

http://msdn.microsoft.com/en-us/library/aa213228(SQL.80).aspx

2 голосов
/ 13 октября 2009

Да, ЛЕВЫЙ ... СОЮЗ ... ПРАВО - это то же самое, что ПОЛНОЕ НАРУЖНОЕ СОЕДИНЕНИЕ.

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