2016-05-13 41 views
1

我運行該SQL查詢:SQL查詢從兩個表中選擇 - 從一個表中返回的結果,如果有沒有在其他表

SELECT a.retail, b.cost 
from call_costs a, call_costs_custom b 
WHERE a.sequence = b.parent 
AND a.sequence = '15684' 
AND b.customer_seq = '124' 

返回兩個a.retailb.cost如果行中call_costs_custom存在,但如果該行不存在,我想只是a.retail使用WHERE子句a. (call_costs)

+0

你需要一個左連接 –

+0

順便說一句:難道''sequence'and customer_seq'字符串?我問,因爲你比較他們的字符串文字只包含數字。如果這些列是數字,您應該將它們與數字進行比較:'AND a.sequence = 15684 AND b.customer_seq = 124'。 –

回答

1

你想要一個外連接,即一個連接,保持記錄從第一個表,即使有第二個表不匹配。使用LEFT OUTER JOIN或短LEFT JOIN因此:

select cc.retail, ccc.cost 
from call_costs cc 
left join call_costs_custom ccc on ccc.parent = cc.sequence and ccc.customer_seq = '124' 
where cc.sequence = '15684'; 
2

從W3Schools的顯示:

LEFT JOIN關鍵字返回左表(table1) 中的所有行以及右表(表2)中的匹配行。當沒有匹配時,結果是NULL 在右側。

SELECT 
    a.retail, 
    b.cost 
FROM 
    call_costs a 
LEFT JOIN 
    call_costs_custom b 
     ON 
    a.sequence = b.parent 
     AND 
    b.customer_seq = '124' 
WHERE 
    a.sequence = '15684' 
+0

這將返回兩者,但如果'call_costs_custom'中沒有行,則不返回結果 – charlie

+0

這是因爲外部連接未正確寫入。外部連接記錄上的所有標準都屬於「ON」條款。正如引用所述:「沒有匹配時,右側的結果爲NULL」。所以'b.customer_seq ='124''在這種情況下永遠不會是真的,你就是你只有內在聯結的地方。 –

+0

編輯以反映Thorsten的評論。 – GibralterTop

0

你的解釋是不是100%清楚 但這裏是我的嘗試:

SELECT COALESCE(b.cost,a.retail) 
FROM call_costs a 
LEFT JOIN call_costs_custom b 
ON a.sequence = b.parent 
    AND b.customer_seq = '124' 
WHERE a.sequence = '15684' 
相關問題