0

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

select settingname, value from PublicSettings where usertype=@type

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

顺便说一句,PrivateSetting 具有相同的列名,除了它也有一个 user_id 列,用于选择用户特定的设置

4

2 回答 2

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
于 2013-06-15T21:25:09.407 回答
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;
于 2013-06-15T21:38:11.837 回答