选择没有工作组的用户,只选择活动用户

时间:2012-09-10 11:04:27

标签: sql oracle oracle11g

我正在试图弄清楚如何选择没有设置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

这完全不存在,但我真的很困惑如何攻击它。

2 个答案:

答案 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的用户。

希望有所帮助。