我有两个属性表。
Table1: App_conf
prop_name
prop_value
prop_desc
Table2: Client_conf
client_id
prop_name
prop_value
prop_desc
我想写一个查询,首先我需要在Client_conf
表中检查特定的prop_name
和client_id
。如果Client_conf
表中没有匹配的行,那么我需要使用App_conf
检查prop_name
表。
,例如App_conf表中的值:
'Max Amount Limit', '2000', 'Maximum amount'
'Min Amount Limit', '200', 'Minimum amount'
Client_conf表中的值:
'1','Max Amount Limit', '1500', 'Maximum amount'
案例1:
prop_name = 'Max Amount Limit', client_id = '1'
在这种情况下,我需要Client_conf表中的值1500。
案例2:
prop_name = 'Min Amount Limit', client_id = '1'
由于Client_conf表中没有这个,我需要从App_conf表中获取值,结果为200.
我需要在具有最佳性能的单个查询中执行此操作。
我正在使用MS SQL。
答案 0 :(得分:1)
您可以加入client_conf
表格中的app_conf
表格,这样就可以获得null
s 不的合适客户端配置。使用coalesce
来确保您获得一些配置,客户端的配置。如果存在,则优先考虑:
SELECT a.prop_name,
a.prop_desc
COALESCE(c.prop_value, a.prop_value) AS prop_value,
FROM app_conf a
LEFT JOIN client_conf c ON a.prop_name = c.prop_name AND
c.client_id = 'some id'
WHERE a.prop_name = 'some name' AND
答案 1 :(得分:0)
试试这个,
SELECT COALESCE(CC.prop_value, AC.prop_value) AS prop_value,
FROM app_conf AS AC LEFT OUTER JOIN
client_conf AS CC ON AC.prop_name = CC.prop_name
WHERE AC.prop_name = 'Min Amount Limit' AND
(CC.client_id = '1' OR CC.client_id IS NULL)
假设prop_name是表之间的有效链接,并且是唯一的。