Инструкция MySQL, использующая OUTER JOIN, против использования WHERE для установки условий

#mysql

#mysql

Вопрос:

Для инструкций с 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 для установки моих условий для любых операторов внешнего (ЛЕВОГО / ПРАВОГО) соединения?

Ответ №1:

могу ли я написать эквивалентные операторы, используя WHERE для установки моих условий для любых операторов внешнего соединения (СЛЕВА / СПРАВА)?

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

 WHERE table1.id=table2.thing ( )
  

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

Ответ №2:

Я не эксперт по MYSQL, но в oracle синтаксис для внешнего соединения в условии where — это where t1.id = t2.id

Ответ №3:

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

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

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

Ответ №4:

 SELECT ...
    FROM table1 t1
    RIGHT OUTER JOIN table2 t2 ON (t1.x = t2.y AND somecondition)
  

Ответ №5:

В Sybase вы можете использовать table1.field1 = table2.field1 (left outer) = right outer