Можно ли написать запрос соединения без ON
оператора? и чем отличаются эти соединения LEFT JOIN, RIGHT JOIN
.
Можно ли написать запрос соединения без ON
оператора? и чем отличаются эти соединения LEFT JOIN, RIGHT JOIN
.
Ответы:
Документация MySQL охватывает эту тему.
Вот синопсис. При использовании join
или inner join
, то on
условие не является обязательным. Он отличается от стандарта ANSI и практически от любой другой базы данных. Эффект cross join
. Точно так же вы можете использовать on
предложение with cross join
, которое также отличается от стандартного SQL.
Перекрестное соединение создает декартово произведение, то есть все возможные комбинации 1 строки из первой таблицы и 1 строки из второй. Перекрестное соединение для таблицы с тремя строками ('a', 'b' и 'c') и таблицы с четырьмя строками (скажем, 1, 2, 3, 4) будет иметь 12 строк.
На практике, если вы хотите выполнить перекрестное соединение, используйте cross join
:
from A cross join B
намного лучше, чем:
from A, B
и:
from A join B -- with no on clause
В on
требуется для правого или левого внешнего соединения, поэтому обсуждение для них не актуально.
Если вам нужно разобраться в различных типах объединений, вам необходимо изучить реляционные базы данных. Stackoverflow - не подходящее место для обсуждения такого уровня.
См. Пример в http://www.sitepoint.com/understanding-sql-joins-mysql-database/
Вы можете использовать "USING" вместо "ON", как в запросе
SELECT * FROM table1 LEFT JOIN table2 USING (id);
ON
предложение сообщает серверу, как связаны таблицы, нет. Если все ваши разные типы соединений дают одинаковый результат, вы почему-то делаете это неправильно, и добавление кода может помочь нам определить вашу проблему. А пока зайдите в блог Джеффа Этвуда, чтобы получить двухминутную вводную информацию о различных типах соединений.