Как использовать mysql JOIN без условия ON?
Можно ли написать запрос на соединение без ON
заявление? и как эти соединения отличаются LEFT JOIN, RIGHT JOIN
работает.
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
условие является обязательным для правого или левого внешнего объединения, поэтому обсуждение для них не актуально.
Если вам нужно понять различные типы объединений, то вам нужно изучить некоторые реляционные базы данных. Stackru не подходит для такого уровня обсуждения.
Смотрите пример в http://www.sitepoint.com/understanding-sql-joins-mysql-database/
Вы можете использовать "USING" вместо "ON", как в запросе
SELECT * FROM table1 LEFT JOIN table2 USING (id);
Есть несколько способов выполнить перекрестное соединение или декартово произведение:
ВЫБЕРИТЕ имена_столбцов ИЗ table1 CROSS JOIN table2;
ВЫБЕРИТЕ имена_столбцов ИЗ table1, table2;
ВЫБЕРИТЕ имена_столбцов ИЗ table1 JOIN table2;
Пренебрежение условием on в третьем случае приводит к перекрестному соединению.
Возможно, вы также захотите исследовать использование UNION, который объединяет несколько таблиц для одного вывода: SQL - объединение двух таблиц для одного вывода