我正在试图弄清楚如何选择没有设置workgroup
的所有活跃用户。
我有user
表,其中col active
(1 = true)表示用户是否处于活动状态。但是,一个用户可以在系统中拥有多个“角色”,每个角色都有一组设置。
Workgroup
是userrolesetting中的一个设置,其ID为1000.我想让所有缺少工作组的用户或工作组为空的用户。
我试着去:
SELECT *
FROM user U
INNER JOIN userrole R
ON R.uid = U.uid
INNER JOIN userrolesetting S
ON R.rid = S.rid
WHERE U.active = 1
这完全不存在,但我真的很困惑如何攻击它。
答案 0 :(得分:3)
尝试以下方法:
SELECT *
FROM USER u
INNER JOIN USERROLE r
ON (r.UID = u.UID)
LEFT OUTER JOIN USERROLESETTING s
ON (s.RID = r.RID AND
s.ID = 1000) -- may be the wrong column name - change as needed
WHERE u.ACTIVE = 1 AND
s.RID IS NULL
分享并享受。
答案 1 :(得分:0)
未经测试,但是如何:
select * from user u
where u.active = 1
and exists(select 'x' from userrole r
where u.uid = r.uid
and not exists(select 'x' from userrolesetting s
where r.rid = s.rid
and s.settingid = 1000));
我不知道您的数据模型,所以,我不确定您的意思是“或工作组为空”?
“workgroup”是settingid = 1000的地方,对吗?
如果您可以显示所有三个表的完整描述,则可能更容易理解您所追求的内容。上述查询应返回所有角色不具有setid = 1000的userrolesettings的用户。
希望有所帮助。