Что значит * - PullRequest
       29

Что значит *

58 голосов
/ 15 сентября 2009

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

WHERE table1.yr =* table2.yr -1

Ответы [ 11 ]

71 голосов
/ 15 сентября 2009

Это:

WHERE t.column =* s.column

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

Ссылка: Внешнее соединение SQL Server 2005 получено

25 голосов
/ 15 сентября 2009

Я полагаю, что это старый синтаксис, указывающий внешнее условие соединения от 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
16 голосов
/ 15 сентября 2009

Это синтаксис старого стиля для выражения объединений

11 голосов
/ 15 сентября 2009

Это означает, что код необходимо заменить немедленно! Это стилевое соединение должно быть правильным. К сожалению, иногда это будет интерпретироваться как перекрестное объединение, поэтому результаты использования этого объединения могут быть неверными. Кроме того, этот синтаксис устарел и не может использоваться в следующей версии сервера SQl.

7 голосов
/ 15 сентября 2009

Это синтаксис ANSI SQL 1989 для RIGHT OUTER JOIN, где * = будет LEFT OUTER JOIN.

Следует также отметить, что включение синтаксиса объединения в предложение WHERE устарело в SQL 2008. http://scarydba.wordpress.com/2009/09/15/no-join-predicate/ <== Своевременная статья по этому вопросу. </p>

2 голосов
/ 15 сентября 2009

Это старый стиль объединений, которые устарели в ANSI SQL92. Новый синтаксис использует INNER и OUTER JOIN, которые объединяют таблицы на основе выражений, а не равенства

1 голос
/ 15 сентября 2009

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

0 голосов
/ 20 февраля 2010

Быть простым и понятным. Это оператор внешнего соединения SQL-92 ( подробнее )

Не используйте его, это очень старая школа, но она похожа на LEFT JOIN и RIGHT JOIN. Все, что он делает, это сообщает, какая сторона соединения является «родительской», поэтому строки на этой стороне будут считаться первыми.

Если вы попытаетесь запустить это на SQL 2005, он выдаст ошибку, сообщающую, что вам нужно запустить это в режиме совместимости.

0 голосов
/ 16 сентября 2009
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
0 голосов
/ 15 сентября 2009

Здесь много глупых ответов.Вы не задали предложение FROM, поэтому невозможно определить, представляет ли ваш * = внешнее соединение влево или вправо.

WHERE table1.yr =* table2.yr -1

- это старый синтаксис для внешнего соединения, наверняка.Но любой, кто утверждает, что знает, является ли это левым или правым внешним соединением, ошибается.Это зависит от порядка, в котором table1 и table2 названы в предложении FROM, и это не дано.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...