2013-09-21 91 views
2

有我的應用程序查詢* =和= * SQL操作

*= and =* 

SQL平等。這是什麼意思?我調查了谷歌,但我找不到足夠的信息。例如:

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 '*='. 

但我在相關的服務器上運行相同的查詢,此查詢工作沒有任何error.I在我的本地計算機中使用sql server 2012 express edition,並在相關服務器中安裝sql server 2005。爲什麼? 在此先感謝。

+3

http://stackoverflow.com/questions/6269845/what-is-this-operand-star-equals-in-sql-server-2000。顯然它在SQL Server中用作聯接的簡寫。我其實從來沒有見過,看起來像是一個等待發生的事故。也許他們在2012年刪除了它? – ChicagoRedSox

+0

@ChicagoRedSox:AFAIK它們是從SQL Server的祖先Sybase繼承而來的。 –

+0

@ muistooshort - 有趣。我大多數情況下使用Oracle和MySQL,所以我可能只是沒有經過SQL Server足以遇到它。 – ChicagoRedSox

回答

2

*=是左連接的ANSI-89語法。它現在已被棄用,這就是爲什麼你會得到錯誤。

類似地=*類似於右連接。

你需要的加入條款從where子句聯接語法移動,但不知道該表中的字段從何而來,我不能更具體

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),讓您的本地機器上的查詢工作,但我會建議它改寫當前的語法。

+0

這是左連接還是左外連接?我試過這個,但它不起作用: – rockenpeace

+0

選擇ODR_YO_ID,OGR_OKUL_NO,OGR_ADI +''+ OGR_SOYADI OGR,COUNT(ODR_YO_ID)SAYI從YIL_OGRENCI,OGRENCI,YIL_SUBE LEFT OUTER JOIN(OGRENCI_DAVRANIS RIGHT OUTER JOIN ON ODR_OGR_ID = OGR_ID)ON YSB_YIL_KOD = ODR_YIL_KOD 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 GROUP BY ODR_YO_ID,OGR_OKUL_NO,OGR_ADI +」「+ OGR_SOYADI,YO_OKUL_DEGIS_TARIHI ORDER BY OGR – rockenpeace

+0

左連接和左外連接是同義。它怎麼不工作? – podiluska