2015-08-31 4 views
1

Если в таблице A есть записи 7k, а таблица B содержит 5 записей, то Left Outer Join, содержащая таблицу A как драйвер, дает записи 7k и Right Outer Join, имеющие таблицу B, поскольку драйвер дает 5 записей.1 Outer Join vs Left join follow with Right Join

Однако, согласно моему пониманию, ПОЛНАЯ ВНЕШНЯЯ ПРИСОЕДИНЯТЬ дает 7k * 5 записей. Всегда ли это так, или это зависит от раздела Join? Если это всегда так, то для объединения данных между таблицей A и таблицей B это не лучший вариант для получения результатов LEFT OUTER JOIN UNION ALL с результатами Right OUTER JOIN вместо FULL OUTER JOIN. Простите мое оцепенение, я очень устал. :-)

Цифры, показанные здесь, дают относительное изменение записей, которые мы можем иметь между этими таблицами, и таблица B на самом деле будет расти в будущем.

ответ

1

Я думаю, что вы думаете о FULL OUTER JOIN на самом деле CROSS JOIN или декартовой операции соединения. CROSS JOIN возвращает N * M записи, где N - количество записей в левой таблице, а M - количество записей в правой таблице.

FULL OUTER JOIN отличается - это комбинация LEFT JOIN и RIGHT JOIN за одну операцию: сначала соединяются таблицы, и каждая запись, полученная в результате операции объединения, возвращается.

Кроме того, как LEFT JOIN, строки из левой таблицы, не имеющие матч по праву будут возвращены, а также и показать NULL столбцов для столбцов в таблице справа, и, как RIGHT JOIN, строки из правая таблица, которая не имеет совпадений слева, будет возвращена и покажет NULL столбцы для столбцов в левой таблице.