2011-04-27 70 views
1

我正在研究一些傳統SQL(用sybase lingo編寫)並將其轉換爲SQL-92兼容表單。問題是,我無法理解「* =」的行爲。Sybase外連接行爲

查詢(適當審查):

SELECT 
    C.*, SUM(P.qty) from Cars C, Parts P 
WHERE 
    C.carid = 1 
AND C.carid *= P.carid 
AND C.missingpart *= P.missingpart 
AND C.manufacturer *= P.manufacturer 
AND P.qty is not null 
GROUP BY C.carid, C.missingpart, C.manufacturer 

我把它轉換爲:

SELECT 
    C.*, SUM(P.qty) from Cars C 
     LEFT JOIN Parts P 
     ON C.carid = P.carid 
     AND C.missingpart = P.missingpart 
     AND C.manufacturer = P.manufacturer 
WHERE 
    C.carid = 1 
AND P.qty is not null 
GROUP BY C.carid, C.missingpart, C.manufacturer 

但事實證明 - 他們是不等價的。有人可以幫助我理解sybase外連接中「* =」的確切行爲以及爲什麼我的兩個查詢不相同?

謝謝:)

PS:我使用的是Sybase ASE的TDS 5.5

回答

4

嘗試從WHERE子句中移動AND P.qty is not null到聯接表達式。

+0

我認爲這是正確的答案。 – kolchanov 2011-04-27 18:34:01

+3

我發現這個鏈接:http://www.sybase.com/content/1017447/tsql.pdf解釋了很多這個siht。 – jrharshath 2011-04-28 04:54:04