Я пытаюсь отслеживать некоторые SQL в Microsoft Server. Я наткнулся на соединение, которое использует незнакомое мне соглашение. Что означает "=*
"?
WHERE table1.yr =* table2.yr -1
Я пытаюсь отслеживать некоторые SQL в Microsoft Server. Я наткнулся на соединение, которое использует незнакомое мне соглашение. Что означает "=*
"?
WHERE table1.yr =* table2.yr -1
Это:
WHERE t.column =* s.column
... является старым синтаксисом внешнего соединения TSQL (pre SQL Server 2005) и не является ANSI JOIN.
Я считаю, что это старый синтаксис, указывающий внешнее условие соединения из таблицы1 в таблицу2
Старый стиль:
SELECT * FROM table1, table2
WHERE table1.yr =* table2.yr -1
Новый стиль (SQL92):
SELECT * FROM table2
LEFT OUTER JOIN table1 ON table1.yr = table2.yr - 1
Это старый синтаксис стиля для выражения объединений
Это означает, что код необходимо немедленно заменить! Это объединение стиля должно быть правильным соединением. К сожалению, это иногда интерпретируется как перекрестное соединение, поэтому результаты использования этого объединения могут быть неверными. Кроме того, этот синтаксис устарел и не может использоваться inteh следующей версией сервера SQl.
Это синтаксис ANSI SQL 1989 для RIGHT OUTER JOIN, где * = будет LEFT OUTER JOIN.
Следует также отметить, что включение синтаксиса соединения в предложение WHERE устарело в SQL 2008. http://scarydba.wordpress.com/2009/09/15/no-join-predicate/ < == A своевременная статья об этом.
Это старый стиль объединений, который устарел в ANSI SQL92. Новый синтаксис использует INNER и OUTER JOIN, которые объединяют таблицы на основе выражений, а не равенства
A??? внешнее соединение задается с использованием символа = * вместо = в предложении WHERE.
yeap, это еще один синтаксис для левого внешнего соединения
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 (подробнее)
Не используйте его, его очень старую школу, но она похожа на LEFT JOIN и RIGHT JOIN. Все его действия говорят, какая сторона соединения является стороной "Родитель", поэтому строки на этой стороне будут считаться первыми.
Если вы попытаетесь запустить это на SQL 2005, это вызовет ошибку, сказав, что вам нужно запустить это в режиме совместимости.
Здесь много глупых ответов. Вы не предоставляли предложение FROM, так что не можете сказать, если ваш * = представляет LEFT или RIGHT внешнее соединение.
WHERE table1.yr =* table2.yr -1
- старый синтаксис для внешнего соединения. Но любой, кто утверждает, что ошибается, является ли это ВЛЕВО или ПРАВИЛЬНОЕ внешнее соединение. Это зависит от порядка, в котором table1 и table2 указаны в предложении FROM, и которые не заданы.