Что означает=*?


Я пытаюсь отследить некоторые SQL в Microsoft Server. Я наткнулся на соединение, которое использует незнакомое мне соглашение. Что значит "=*" значит?

WHERE table1.yr =* table2.yr -1
11 58

11 ответов:

Это:

WHERE t.column =* s.column

...является старым синтаксисом внешнего соединения TSQL (до SQL Server 2005) и не является соединением ANSI.

ссылки: SQL Server 2005 Outer Join Gotcha

Я считаю, что это старый синтаксис, указывающий на внешнее условие соединения от 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. Новый синтаксис использует внутреннее и внешнее соединение, которые соединяют таблицы на основе выражений, а не равенства

а ??? внешнее соединение задается с помощью символа =* вместо = в предложении WHERE.

да, это другой синтаксис для левого внешнего соединения

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, и это не дано.