首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如果用户设置表为空,请从默认表中为用户选择默认设置

如果用户设置表为空,请从默认表中为用户选择默认设置
EN

Stack Overflow用户
提问于 2016-02-23 08:11:21
回答 2查看 87关注 0票数 0

我的sql很弱,我正在努力获得我想要的结果,我确信这是简单的东西。

我有三张表:

代码语言:javascript
运行
复制
user, usersetting and defaultsetting

用户表列:

代码语言:javascript
运行
复制
UserId | Email

UserSetting表列:

代码语言:javascript
运行
复制
UserId | SettingKey | IsEnabled

DefaultSetting表列:

代码语言:javascript
运行
复制
SettingKey | IsEnabled

如果用户显式地更新了他们的设置,那么他们将只在usersetting表中有一条记录,否则他们应该只从defaultSetting表中获取设置。用户的设置为打开或关闭(IsEnabled)

我想要编写一个查询,该查询获取启用了设置X (settingKey = x)的所有用户。如果用户的UserSettings表中没有用于设置x的行,但是默认设置IsEnabled = true,那么我仍然希望为该用户获取一行。

所以从逻辑上讲,我想这样做

代码语言:javascript
运行
复制
Select UserId, Email from User if they have turned setting x on explicitly or setting x defaults to on
EN

回答 2

Stack Overflow用户

发布于 2016-02-23 08:18:31

coalesce是你的朋友。

代码语言:javascript
运行
复制
Select UserId, Email, coalesce(UserSetting.SettingKey, DefaultSetting.SettingKey) as SettingKey
from User 
left join UserSetting 
on user.userid = UserSetting.userid
left join DefaultSetting 
on UserSetting.SettingKey = DefaultSetting.SettingKey
票数 0
EN

Stack Overflow用户

发布于 2016-02-23 08:47:03

这应该是可行的。我包含了用于测试的示例表和数据

代码语言:javascript
运行
复制
create table #Users (UserId int, Email varchar(100))
create table #UserSetting (UserId int, SettingKey varchar(10), IsEnabled int)
create table #DefaultSetting (SettingKey varchar(10), IsEnabled int)

insert into #Users values (1, 'User1')
insert into #Users values (2, 'User2')
insert into #Users values (3, 'User3')

insert into #DefaultSetting values ('default', 1)

insert into #UserSetting values (1, 'pass1', 1)
insert into #UserSetting values (2, 'pass2', 1)


select u.UserId, u.Email, coalesce(us.SettingKey, ds.SettingKey) SettingKey
from #Users u
    left join #UserSetting us on us.UserId = u.UserId and us.IsEnabled = 1
    cross join #DefaultSetting ds
where coalesce(us.SettingKey, ds.SettingKey) = 'pass2'
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35566446

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档