2013-05-09 4 views
57

Можно ли написать запрос соединения без ON заявление? и как эти объединения отличаются от LEFT JOIN, RIGHT JOIN работ.Как использовать mysql JOIN без условия ON?

+0

Как предложение 'ON' сообщает серверу, как связаны эти таблицы, нет. Если ваши разные типы соединений дают одинаковый результат, вы как-то делаете это неправильно, и добавление некоторого кода может помочь нам определить вашу проблему. В то же время перейдите к блогу Джеффа Атвуда (http://www.codinghorror.com/blog/2007/10/a-visual-explanation-of-sql-joins.html) за 2-минутный ввод в различные типы соединений. – fvu

ответ

84

MySQL documentation охватывает эту тему.

См. Краткое описание. При использовании 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 не подходит для такого уровня обсуждения.

5

Смотрите некоторые примеры в http://www.sitepoint.com/understanding-sql-joins-mysql-database/

Вы можете использовать «USING» вместо «ON», как в запросе

SELECT * FROM table1 LEFT JOIN table2 USING (id); 
+2

Для дополнительного пояснения столбец соединения в обеих таблицах должен быть идентично назван для ИСПОЛЬЗОВАНИЯ для работы – rmirabelle

2

Вы также можете исследовать использование UNION, который сочетает в себе несколько таблиц для одного выхода: SQL - Combine two tables for one output

+0

Как это относится к вопросу OP? –

Смежные вопросы