*= и =* SQL-операторы

Есть

*= and =*

sql в моих запросах приложений. Что это значит? Я исследовал в Google, но я не мог найти достаточно информации. Например :

SELECT ODR_YO_ID, OGR_OKUL_NO, OGR_ADI+' '+OGR_SOYADI OGR, COUNT(ODR_YO_ID) SAYI
FROM OGRENCI,YIL_SUBE,YIL_OGRENCI, OGRENCI_DAVRANIS 
WHERE  ODR_OLUMLU = 1 AND YO_OGR_ID = OGR_ID AND  ODR_YO_ID = YO_ID AND YO_AKTIF = 1 AND 
YO_YSB_ID = YSB_ID AND  YSB_ID = 2183 AND YSB_YIL_KOD *= ODR_YIL_KOD AND  ODR_OGR_ID =* OGR_ID  
GROUP BY ODR_YO_ID, OGR_OKUL_NO, OGR_ADI+' '+OGR_SOYADI, YO_OKUL_DEGIS_TARIHI 
ORDER BY OGR

Когда я выполняю этот SQL-запрос на своем локальном компьютере, я получаю эту ошибку:

 Msg 102, Level 15, State 1, Line 5
 Incorrect syntax near '*='.

Но я запускаю тот же запрос на связанном сервере, этот запрос работает без ошибок. Я использую экспресс-версию SQL Server 2012 на своем локальном компьютере, а на связанном сервере есть SQL Server 2005. Почему ? Заранее спасибо.


person rockenpeace    schedule 21.09.2013    source источник
comment
stackoverflow.com/questions/6269845/. По-видимому, он используется как сокращение в SQL Server для соединения. На самом деле я никогда не видел этого, и это похоже на несчастный случай. Может в 2012 сняли?   -  person ChicagoRedSox    schedule 21.09.2013
comment
@ChicagoRedSox: насколько я знаю, они были унаследованы от Sybase, которая является предком SQL Server.   -  person mu is too short    schedule 21.09.2013
comment
@muistooshort - интересно. В основном я использую Oracle и MySQL, поэтому я, вероятно, просто недостаточно знаком с SQL Server, чтобы столкнуться с ним.   -  person ChicagoRedSox    schedule 21.09.2013
comment
@ChicagoRedSox: я в основном использую PostgreSQL, но я все еще восстанавливаюсь после посттравматического стрессового расстройства, вызванного Sybase более десяти лет назад :) Вещи *= использовались для неявных внешних соединений в прежние времена, когда никто не использовал явные условия соединения в предложении FROM. .   -  person mu is too short    schedule 21.09.2013


Ответы (1)


*= был синтаксисом ANSI-89 для левого соединения. Теперь он устарел, поэтому вы получаете сообщение об ошибке.

Точно так же =* аналогичен правому соединению.

Вам нужно переместить предложения соединения из предложения where в синтаксис соединения, но, не зная, из каких таблиц взяты поля, я не могу быть более конкретным

ie

YSB_YIL_KOD *= ODR_YIL_KOD 

становится

ysbtable 
    left join odrtable 
        on YSB_YIL_KOD = ODR_YIL_KOD 

а также

ODR_OGR_ID =* OGR_ID

становится

odrtable 
    right join ogrtable
        on ODR_OGR_ID = OGR_ID

Вы можете заставить запрос работать на вашем локальном компьютере, изменив уровень совместимости базы данных ( http://technet.microsoft.com/en-us/library/bb510680.aspx ), но я бы посоветовал переписать его на текущий синтаксис.

person podiluska    schedule 21.09.2013
comment
Это левое соединение или левое внешнее соединение? Я пробовал это, но это не работает: - person rockenpeace; 21.09.2013
comment
Выберите ODR_YO_ID, OGR_OUL_NO, OGR_ADI + '' + OGR_SOYADI OGR, COUNT (ODR_YO_ID) SAYE из Yil_Orrenci, ogrenci, yil_sube левый внешний присоединение (ogrenci_davranis прямоу) на odr_ogr_id = odr_yil_kod, где odr_olu = 1 и yo_ogr_id = ogr_id и odr_yo_Id = ЙО_ИД И ЙО_АКТИФ = 1 И ЙО_ЫСБ_ИД = ЫСБ_ИД И ЫСБ_ИД = 2183 ГРУППА ПО ОДР_ЙО_ИД, ОГР_ОКУЛ_НО, ОГР_АДИ+' '+ОГР_СОЯДИ, Ё_ОКУЛ_ДЕГИС_ТАРИХИ ПОРЯДОК ПО ОГР - person rockenpeace; 21.09.2013
comment
Левое соединение и левое внешнее соединение являются синонимами. Как это не работает? - person podiluska; 21.09.2013
comment
Я запускаю этот запрос в студии управления сервером sql, но данных нет. Исходный запрос получает 19 строк, но мой запрос получает 0 строк. - person rockenpeace; 22.09.2013
comment
@rockenpeace Не зная, из каких таблиц взяты поля, я не могу сказать вам, где ошибка. - person podiluska; 22.09.2013