Правильно ли я переводю синтаксис Ansi OUTER JOIN в более старый синтаксис Sybase (* =)? - PullRequest
2 голосов
/ 13 июня 2009

Предполагая, что это правильный Ansi Синтаксис SQL для левого внешнего соединения :

SELECT *  
FROM   employee  LEFT OUTER JOIN department  
          ON employee.DepartmentID = department.DepartmentID

И это правильный Ansi Синтаксис SQL для правого внешнего соединения :

SELECT * 
FROM   employee RIGHT OUTER JOIN department 
          ON employee.DepartmentID = department.DepartmentID

Является ли это более старым Sybase эквивалентом левого внешнего соединения :

SELECT * FROM employee, department
WHERE employee.DepartmentID *= department.DepartmentID

А это более старый Sybase эквивалент правого внешнего соединения :

SELECT * FROM employee, department
WHERE employee.DepartmentID =* department.DepartmentID

Таким образом, мы ставим * слева от знака равенства для левого внешнего соединения и справа от знака равенства для правого внешнего соединения.

Это правильно?

Ответы [ 4 ]

3 голосов
/ 13 июня 2009

*= эквивалентно левому внешнему объединению и ... =* - правому внешнему объединению (как вы уже догадались)

Возможно, вам будет интересно заметить, что в старых версиях Sybase ASE поддержка *=* отсутствует. Семантика и совместимость внешних объединений Transact-SQL объясняет, почему (PDF)

2 голосов
/ 28 марта 2012

да. но иногда эти два могут немного отличаться при обработке множества результатов, где

1 голос
/ 13 июня 2009

Зачем вам переводить с левого соединения на более старый синтаксис, разве вы не должны переводить с более старого синтаксиса на предпочтительный более новый стандарт? Я не знаю о Sybase, но так как SQl Server основан на Sybase, я подозреваю, что у него может быть та же проблема, что старый синтаксис не всегда правильно интерпретируется как внешнее соединение. Иногда база данных может интерпретировать ее как перекрестное соединение, поэтому в общем случае я не рекомендую использовать ее, если вы не обращаетесь к базе данных в такой старой версии, что новый синтаксис недоступен.

1 голос
/ 13 июня 2009

Да, это правильно

...