2010-05-03 68 views
0

我想爲SQLITE編寫一點SQL,它將從兩個表(TableA和TableB)中獲取子集,然後執行LEFT JOIN。從兩個表和LEFT JOIN結果中選擇子集

這是我嘗試過,但是這會產生錯誤的結果:

Select * from TableA 
Left Join TableB using(key) 
where TableA.key2 = "xxxx" 
AND TableB.key3 = "yyyy" 

這忽略情況下,鍵2 =「XXXX」,但KEY3 =「YYYY」!

我希望TableA中的所有行匹配我的條件,而不管TableB中它們對應的值是否匹配,但只匹配TableB中匹配這兩個條件的那些行。

我確實設法通過使用VIEW來解決這個問題,但我確信必須有更好的方法來做到這一點。現在開始讓我瘋狂嘗試解決它。

(感謝您的幫助,希望我解釋得很好)。

回答

1
Select * 
from TableA 
Left Join TableB on TableA.key = TableB.key 
    and TableB.key3 = "yyyy" 
where TableA.key2 = "xxxx" 
+0

啊,完美。謝謝。 – Simon 2010-05-03 18:02:32

2

YOu做了經典的左連接錯誤。在大多數數據庫中,如果你想在左邊的右邊的表上添加一個條件,你必須把這個條件放在連接本身而不是where子句中。在SQL Server中,這會將左連接變爲內連接。我沒有使用過SQl lite,所以我不知道它是否一樣,但所有記錄都必須符合where子句。