#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