1

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

这完全是胡说八道,但我真的很困惑如何攻击它。

4

2 回答 2

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

分享和享受。

于 2012-09-10T11:16:52.717 回答
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));

我不知道您的数据模型,所以,我不确定您所说的“或工作组在哪里为空”是什么意思?

“工作组”是settingid = 1000的地方,对吗?

如果您可以显示所有三个表的完整描述,则可能更容易理解您所追求的。上面的查询应该返回所有的用户,这些用户的角色没有 userrolesettings 的 settingid=1000。

希望有帮助。

于 2012-09-10T11:23:01.913 回答