1

セットを持たないすべてのアクティブなユーザーを選択する方法を見つけようとしていますworkgroup

userユーザーがアクティブかどうかを確認するための列active(1=true) を持つテーブルがあります。ただし、1 人のユーザーがシステム内で複数の「役割」を持つことができ、各役割には一連の設定があります。

Workgroupuserrolesetting の設定で、ID は 1000 です。ワークグループがない、またはワークグループが null であるすべてのユーザーを取得したいと考えています。

私は一緒に行こうとしています:

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));

あなたのデータモデルがわからないので、「またはワークグループがnullの場所」とはどういう意味ですか?

「ワークグループ」はsettingid = 1000の場所ですよね?

3 つすべての表の完全な説明を示すことができれば、目的を理解しやすくなります。上記のクエリは、settingid=1000 を持つ userrolesettings を持たないロールを持つすべてのユーザーを返す必要があります。

それが役立つことを願っています。

于 2012-09-10T11:23:01.913 に答える