Что это за операнд (* = звезда-равно) в SQL Server 2000? - PullRequest
21 голосов
/ 07 июня 2011

У меня есть запрос, который я извлек из MS SQL 2000 и включил в запрос MySql. Это не сработало, MySql подавился оператором * =. В этом примере у меня есть два столбца varchar с именем person_name.

SELECT * FROM tbl1 a, tbl2 b 
WHERE a.id = b.id
AND a.person_name *= b.person_name

Я знаю на других языках myInt * = myTotal также может читаться как myInt * myInt = myTotal. Тем не менее, я работаю с varchars, которые содержат все символы, без целых чисел. Я написал это как:

AND a.person_name * a.person_name = b.person_name

Вуаля! Похоже, сработало. Может кто-нибудь объяснить, что происходит? Оператор * = преобразует символы в их целочисленные эквиваленты или? И почему я не могу найти этого оператора в Интернете?

Ответы [ 2 ]

21 голосов
/ 07 июня 2011

В SQL 2000 это использовалось как LEFT OUTER JOIN

= * - ПРАВИЛЬНОЕ НАРУЖНОЕ СОЕДИНЕНИЕ

Ваш запрос может быть:

SELECT 
  * 
FROM 
  tbl1 a LEFT OUTER JOIN tbl2 b ON a.person_name = b.person_name
WHERE 
  a.id = b.id

Как указано здесь :

Определяет внешнее соединение, используя нестандартный синтаксис для конкретного продукта и пункт ГДЕ. Оператор * = используется для указания левого внешнего соединения и оператор = * используется для указания правое внешнее соединение.

4 голосов
/ 07 июня 2011

В MSSQL соглашение * = в предложении WHERE указывает на соединение.Так что вы действительно видите ЛЕВОЕ ВНЕШНЕЕ СОЕДИНЕНИЕ между tbl1 и tbl2 на person_name, где будут возвращены все значения из tbl1 и соответствующие значения на tbl2.

...