我有一個想創建視圖的問題。我有兩個表加入了一個左外連接,例如tableA
和tableB
,其中tableB
是左外連接。用於左外連接的SQL where子句
我想只選擇狀態等於4的表B中的那些行,所以我將WHERE state = 4
添加到我的查詢中。現在結果集被修剪很多,因爲tableB
中沒有匹配行的所有行都從結果中刪除(因爲這些行的狀態不是4)。我也試過WHERE state = 4 OR state IS NULL
,也沒有工作(因爲state
技術上不是NULL
,當沒有狀態)。
所以我需要的是WHERE
語句,它只在實際存在一行時才被評估,這樣的事情是否存在?
如果沒有,我會看到兩個選項:join (SELECT * FROM tableB WHERE state = 4)
而不是表B,或者使用相同的WHERE
語句創建一個視圖並加入。什麼是最好的選擇性能明智?
順便說一句,這是SQL Server 2008 R2。
這將是有趣的嘗試制定出爲什麼'WHERE狀態= 4或狀態NULL'不工作,因爲它應該防止LEFT JOIN被轉換成內加入。 –
@Damien_The_Unbeliever - 它會給你所有來自TableA的行而不是TableB,但不會讓TableA在TableB中有匹配的行,其中狀態<> 4. http://data.stackexchange.com/stackoverflow/qt/110316/ –
@ Damien_The_Unbeliever:有3個狀態:匹配狀態= 4,與狀態匹配<> 4,不匹配 – gbn