Почему в левом внешнем соединении требуется предложение ON - PullRequest
0 голосов
/ 09 июня 2018

Насколько я понимаю, в левом внешнем соединении между двумя таблицами (скажем, a & b) все строки таблицы с левой стороны объединения извлекаются независимо от значений в строках правой таблицы.Тогда зачем нам нужно предложение «ON», определяющее условие, что-то вроде этого:

select * from a LEFT OUTER JOIN b on a.some_column1 = b.some_column2;

Почему существует необходимость в выражении «a.some_column1 = b.some_column2».

Ответы [ 3 ]

0 голосов
/ 09 июня 2018

Требуется условие on, поскольку вы «присоединяетесь», и вам нужно указать, к каким столбцам вы хотите присоединиться.В противном случае вы бы использовали традиционные from без каких-либо условий where для всех возможных комбинаций строк.Но вы хотели присоединиться, верно?

Да, это в значительной степени так и есть.

0 голосов
/ 12 июня 2018

Насколько я понимаю, в левом внешнем соединении между двумя таблицами (скажем, a и b) все строки таблицы с левой стороны объединения извлекаются независимо от значений в строках справаТаблица.

Это верно в том смысле, что в нем говорится о том, что возвращает left join on, но это не определение того, что он возвращает.left join on возвращает inner join on строк плюс (union all) несопоставленные строки левой таблицы, расширенные нулями.

inner join on возвращает строки cross join, которые удовлетворяют условию on - что может бытьлюбое условие на столбцах.cross join возвращает каждую комбинацию строки из левой таблицы и строки из правой таблицы.

Что вы ожидаете от значения outer join без on?В стандартном SQL outer & inner join должно быть on.inner join on истинное состояние такое же, как cross join.Который не имеет бесподобных левых строк таблицы.Таким образом, если вы хотите, чтобы outer join без on означало outer join on истинное условие, то, поскольку в inner join on нет этого условия, строки не равны, результатом также будет cross join,(MySQL позволяет использовать inner join без on, но это просто означает cross join.)

0 голосов
/ 09 июня 2018

A left join вернул бы все строки из таблицы a, и для каждой строки совпадающая строка в таблице b, если она существует - если ее нет, вместо 1004 * s будет возвращено вместоb столбцы.Предложение on определяет, как выполняется это сопоставление.

...