如果一个表没有值,则从另一个表中获取它

时间:2016-03-03 09:55:43

标签: sql sql-server select join sql-server-2012

我有两个属性表。

Table1: App_conf
prop_name
prop_value
prop_desc

Table2: Client_conf
client_id
prop_name
prop_value
prop_desc

我想写一个查询,首先我需要在Client_conf表中检查特定的prop_nameclient_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。

2 个答案:

答案 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是表之间的有效链接,并且是唯一的。