2010-09-09 81 views
24

我將兩個表上的連接定義爲左外連接,以便所有記錄都從左手錶返回,即使他們在右手錶中沒有記錄。不過,我還需要在右側表格的某個字段中包含where子句,但是......我仍然希望左側表格中的每行記錄都返回一行,即使不符合where子句中的條件。有沒有辦法做到這一點?左外連接和附加的where子句

回答

20

是,把條件(稱爲謂詞)的連接條件

Select [stuff] 
    From TableA a 
     Left Join TableB b 
      On b.Pk = a.Pk 
       -- [Put your condition here, like this] 
       And b.Column = somevalue 
10

你只需把謂語爲JOIN條件。將它放入WHERE子句可以有效地將您的查詢轉換爲內部連接。

例如:

... 
From a 
Left Join b on a.id = b.id and b.condition = 'x' 
1
SELECT x.fieldA, y.fieldB 
FROM x 
LEFT OUTER JOIN (select fieldb, fieldc from Y where condition = some_condition) 
ON x.fieldc = y.fieldc 
0
select * 
    from table1 t1 
    left outer join table2 t2 on t1.id = t2.id 
where t1.some_field = nvl(t2.some_field, t1.some_field) 

UPD: errr ......沒有。這種方式:

select * 
    from table1 t1 
    left outer join table2 t2 on t1.id = t2.id 
where some_required_value = nvl(t2.some_field, some_required_value) 

nvl是Oracle語法它取代第一個參數與在第二情況下,它是null(這是常見的外連接)。其他數據庫可以使用ifnull或​​3210。

因此,你比較t2.some_field與您的搜索條件是否已經滿足連接謂詞,但如果沒有,那麼你只返回一行從table1,因爲some_required_value相比本身將始終是真實的(除非是null,但是 - null = null產量null,既不truefalse

2

您可以使用

WHERE (right_table.column=value OR right_table.column IS NULL) 

這會從表1和表2返回所有行,但只能磨片。表1在表2中沒有對應的行,或者表2中的對應行與您的標準匹配。

+0

這不適用於ECC6 – 2014-04-14 11:27:18