我有两个表PublicSettings和PrivateSettings。 PublicSettings具有针对不同类型用户的所有默认设置,而PrivateSettings仅保留其值与默认设置不同的用户特定设置。我想读取用户的所有设置,但如果该设置存在于私有中,则从该表中获取值,如果不是公共值,则获取该值。
select settingname, value from PublicSettings where usertype=@type
这会选择所有默认设置,但是例如假设默认情况下禁用“show_captcha_on_login”设置,但私有设置中的单个用户的设置名相同,我想从公共场所获取所有这些设置(存在于私有环境中)设置)来自私人设置。
通过PrivateSetting具有相同的列名,除了它也有user_id列,用于选择用户特定的设置
答案 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;