2014-10-17 80 views
0

我想在TABLEA下面的查詢,其中表B是空的,記錄條件對左連接

--This query fetched no records 
SELECT TABLEA.COLA,TABLEA.COLB FROM TABLEA 
LEFT JOIN TABLEB 
ON TABLEA.ID=TABLEB.ID 
WHERE TABLEB.COL1<>'XYZ' 

--This query fetched records . 
SELECT COL1 FROM 
(
SELECT TABLEA.COLA,TABLEA.COLB FROM TABLEA 
LEFT JOIN TABLEB 
ON TABLEA.ID=TABLEB.ID 
)A WHERE COL1 <>'XYZ' 

你能幫我,爲什麼第一次查詢didnt返回任何記錄,雖然它們看起來一樣。我對第一個查詢的理解是「我做了一個左連接,所以如果記錄不存在於tableb中,它應該被替換爲NULL值。作爲NULL <>'xyz'所有記錄都應該被提取正確..

回答

0

放置WHERE如果外部表中沒有滿足條件的行,那麼不會返回任何行。

解決方案然後是在一個外部連接的外部連接表上,將該連接有效地表示爲內部連接。在上面的例子中,這就像將WHERE更改爲AND一樣簡單

必須被放置在WHERE子句中的是測試NULL,即所謂的排除連接 - 即.e.當你真的想要返回逆設置。