Что означает=*?
Я пытаюсь отследить некоторые SQL в Microsoft Server. Я наткнулся на соединение, которое использует незнакомое мне соглашение. Что значит "=*
" значит?
WHERE table1.yr =* table2.yr -1
11 ответов:
Это:
WHERE t.column =* s.column
...является старым синтаксисом внешнего соединения TSQL (до SQL Server 2005) и не является соединением ANSI.
Я считаю, что это старый синтаксис, указывающий на внешнее условие соединения от table1 до table2
старый стиль:
SELECT * FROM table1, table2 WHERE table1.yr =* table2.yr -1
новый стиль (SQL92):
SELECT * FROM table2 LEFT OUTER JOIN table1 ON table1.yr = table2.yr - 1
Это означает, что код должен быть немедленно заменен! Это соединение стиля должно быть правильным соединением. К сожалению, иногда это будет интерпретироваться как перекрестное соединение, поэтому результаты использования этого соединения могут быть неверными. Кроме того, этот синтаксис устарел и не может использоваться в следующей версии SQl server.
это синтаксис ANSI SQL 1989 для правого внешнего соединения, где *= будет левым внешним соединением.
следует также отметить, что размещение синтаксиса соединения в предложении WHERE является устаревшим в SQL 2008. http://scarydba.wordpress.com/2009/09/15/no-join-predicate/
Это старый стиль соединений, которые были устаревшими в ANSI SQL92. Новый синтаксис использует внутреннее и внешнее соединение, которые соединяют таблицы на основе выражений, а не равенства
да, это другой синтаксис для левого внешнего соединения
from table1 left outer join table2 on table1.yr = table2.yr - 1
SELECT * FROM table1, table2 WHERE table1.yr =* table2.yr -1
означает то же самое, как это:
SELECT * FROM table2 LEFT OUTER JOIN table1 ON table1.yr = (table2.yr - 1)
синтаксис * считается устаревшим, и не соответствует стандартам ANSI.
Oracle имеет аналогичную конструкцию такой:
WHERE table1.yr (+)= table2.yr
чтобы быть простым и понятным. Это оператор внешнего соединения SQL-92 (подробнее)
Не используйте его, его очень старая школа, но она похожа на левое соединение и правое соединение. Все его действия говорят, какая сторона соединения является "родительской" стороной, поэтому строки на этой стороне будут рассмотрены в первую очередь.
Если вы попытаетесь запустить это на SQL 2005, он выдаст ошибку, сказав, что вам нужно запустить это в режиме совместимости.
здесь много глупых ответов. Вы не дали предложение FROM, поэтому нет способа узнать, представляет ли ваш *= левое или правое внешнее соединение.
WHERE table1.yr =* table2.yr -1
Это старый синтаксис для внешнего соединения, конечно. Но любой, кто утверждает, что знает, является ли это левым или правым внешним соединением, ошибается. Это зависит от порядка, в котором table1 и table2 названы в предложении FROM, и это не дано.