sql server:从两个不同的表中选择值

时间:2013-06-15 20:52:22

标签: sql-server select

我有两个表PublicSettings和PrivateSettings。 PublicSettings具有针对不同类型用户的所有默认设置,而PrivateSettings仅保留其值与默认设置不同的用户特定设置。我想读取用户的所有设置,但如果该设置存在于私有中,则从该表中获取值,如果不是公共值,则获取该值。

select settingname, value from PublicSettings where usertype=@type

这会选择所有默认设置,但是例如假设默认情况下禁用“show_captcha_on_login”设置,但私有设置中的单个用户的设置名相同,我想从公共场所获取所有这些设置(存在于私有环境中)设置)来自私人设置。

通过PrivateSetting具有相同的列名,除了它也有user_id列,用于选择用户特定的设置

2 个答案:

答案 0 :(得分:1)

试试这个:

 SELECT  
    pub.name, 
    CASE WHEN (pub.name = priv.name ) THEN priv.value ELSE pub.value END AS value
FROM 
    PublicSettings pub 
    LEFT JOIN PrivateSettings priv ON (pub.utype = priv.utype)
WHERE 
    priv.[uid]=1

答案 1 :(得分:1)

您必须使用外部联接,因为特定于用户的值仅对某些公共值存在。私有值的非外观将返回NULL,您可以使用它来确定要返回的值。

SELECT pub.settingname, 
       ISNULL(priv.value,pub.value) AS value
  FROM PublicSettings  pub 
  LEFT OUTER JOIN PrivateSettings priv 
    ON pub.settingname = priv.settingname
   AND priv.userid = @userid
 WHERE pub.usertype=@type;