2016-05-13 91 views
-1

我有兩個表:SQL查詢從兩個表中選擇並返回一個值存在

callcosts 
callcosts_custom 

是有辦法,我可以從兩個表中選擇,如果行存在從callcosts_custom返回cost值如果它不存在,從callcosts

具有以下WHERE子句返回列price

WHERE callcosts_custom.parent = callcosts.sequence 

基本上,callcosts表具有所有默認數據,並且可以爲每個客戶添加自定義數據。

的關係如下:

call_costs.sequence = callcosts_custom.parent 

所以我要檢查,如果在callcosts_custom存在特定callcosts_custom.customer一行。如果這樣做,它會返回callcosts_custom.cost,如果它不存在返回callcosts_price

更新查詢:

select b.cost 

從call_costs_custom b 其中a.sequence = b.parent AND b.customer_seq = '124' UNION ALL 選擇a.retail 從call_costs一個 其中a.sequence = '4706' 和 不存在(來自call_costs_custom b。選擇所需1其中b.parent = a.sequence);

+0

請提供樣本數據和預期的結果。 –

+0

聽起來你正在尋找'LEFT OUTER JOIN'在另一個表上,然後在'SELECT'中使用'CASE'來有條件地選擇一列或另一列。 – David

+0

看看我的更新 – charlie

回答

0

是的。 。 。這聽起來像是一個優先級查詢。這通常看起來像

select ccc.price 
from callcosts_custom ccc 
where ccc.?? = ?? 
union all 
select cc.price 
from callcosts ccc 
where cc.?? = ?? and 
     not exists (select 1 from callcosts_custom ccc where ccc.?? = cc.??); 

目前還不清楚你的問題是什麼列。

+0

檢查我的更新 – charlie

+0

好的,我改變了你的查詢(檢查我的問題更新)這是返回正確的數據,但它顯示所選的customer_seq在call_costs_custom中的所有行,然後它也顯示來自call_costs的行 – charlie

0

這可以通過左連接表(假設每行必須存在於callcosts中,並且可能存在或不存在於callcosts_custom中,但不是相反方式)並使用​​3210來完成。您還沒有給出有關表的信息太多,但我假設有一些ID列識別行:

SELECT c.id, COALESCE(cc.price, c.price) AS price 
FROM  callcosts c 
LEFT JOIN callcosts_custom cc ON c.id = cc.id 
0

這應該爲你工作:

SELECT IFNULL(cc.cost, c.price) cost 
FROM  callcosts c 
LEFT JOIN cc.parent = c.sequence 
+0

我剛剛試過這個查詢從你的:'SELECT IFNULL(CC.cost,c.retail)成本 FROM call_costs c LEFT JOIN call_costs_custom cc ON c.sequence = cc.parent WHERE c.sequence ='1536'和cc。 customer_seq ='58',但那不返回行。儘管'call_costs'中存在'sequence'' 1536'行 – charlie

相關問題