Можно ли написать запрос на соединение без оператора ON
? и чем эти объединения отличаются LEFT JOIN, RIGHT JOIN
работы.
Как использовать mysql JOIN без условия ON?
Ответы (3)
Эта тема рассматривается в документации MySQL.
Вот синопсис. При использовании join
или inner join
условие on
необязательно. Это отличается от стандарта ANSI и отличается практически от любой другой базы данных. Эффект cross join
. Точно так же вы можете использовать предложение on
с 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);
Есть несколько способов сделать перекрестное соединение или декартово произведение:
SELECT column_names FROM table1 CROSS JOIN table2;
SELECT column_names FROM table1, table2;
SELECT column_names FROM table1 JOIN table2;
Пренебрежение условием on
в третьем случае приводит к перекрестному соединению.
ON
сообщает серверу, как связаны таблицы, нет. Если все ваши разные типы соединения дают одинаковый результат, значит, вы что-то делаете неправильно, и добавление некоторого кода может помочь нам определить вашу проблему. А пока перейдите к Джеффу. Блог Этвуда для двухминутного ознакомления с различными типами соединений. - person fvu   schedule 10.05.2013