MySQL оператор с использованием OUTER JOIN против использования WHERE для установки условий - PullRequest
0 голосов
/ 17 сентября 2009

Для заявлений с INNER JOIN:

SELECT column(s) FROM table1
INNER JOIN table2 ON condition(s)
...
INNER JOIN tableN ON condition(s);

Я могу написать эквивалентное утверждение с этим:

SELECT column(s) FROM table1, table2, ..., tableN WHERE condition(s);

обратите внимание, как я использую WHERE для установки моих условий во втором операторе.

Вопрос : могу ли я написать эквивалентные операторы, используя WHERE, чтобы также задать условия для любых операторов OUTER (LEFT / RIGHT) JOIN?

Ответы [ 5 ]

3 голосов
/ 17 сентября 2009

могу ли я написать эквивалентные операторы, используя WHERE, чтобы установить мои условия для любых операторов OUTER (LEFT / RIGHT) JOIN?

Нет, не в ANSI SQL или MySQL. Некоторые другие базы данных имеют собственный синтаксис, который использовался до принятия синтаксиса ANSI JOIN. Например, в Oracle 8:

WHERE table1.id=table2.thing (+)

Но сегодня синтаксис ANSI JOIN, как правило, предпочтительнее для обоих видов объединения.

1 голос
/ 17 сентября 2009

Я не эксперт по MYSQL, но в оракуле синтаксис для внешнего объединения в условии где - это где t1.id + = t2.id

0 голосов
/ 16 июля 2010

В sybase вы можете использовать table1.field1 = table2.field1 (слева снаружи) = справа снаружи

0 голосов
/ 17 сентября 2009

Из MySQL 5.0 Справочное руководство :

"INNER JOIN и, (запятая) семантически эквивалентны при отсутствии условия соединения" Для меня это означало бы, что запятая подразумевает ВНУТРЕННЕЕ СОЕДИНЕНИЕ.

Я рекомендую использовать синтаксис объединения ANSI для большей ясности и мобильности.

0 голосов
/ 17 сентября 2009

Я думаю:

ВЫБРАТЬ ... ИЗ таблицы 1 т1 ПРЯМОЕ НАРУЖНОЕ СОЕДИНЕНИЕ table2 t2 ON (t1.x = t2.y И некоторые условия)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...