1

1 としてロールを持たないユーザーのみを返すクエリを作成しようとしています。

表の列は、roleid、userid、usertype です。ユーザー ID には、各ロール ID のエントリがあります。たとえば、次のようになります。

roleid     userid
  1           323    
  3           323
  4           323
  6           323
  7           323
  10          323    
  3           324
  4           324
  6           324
  7           324
  10          324

これを試すたびに、roleidが1の行を取り出すだけですが、ユーザー全体、つまり323が1であるため表示されないようにする必要があります。

これについて本当に助けていただければ幸いです。

ありがとう

編集:

select * from usersroles where userid in (
select userid from uprofiles where networkid in 
(select network_id from network where usertype in (469,467,466,468))) and roleid !=1;

上記を使用していますが、これはロール ID 1 のないユーザーを返しますが、他のロールを持つユーザーを返します。クエリが 1 を持たないユーザーのみを返すようにします。

4

4 に答える 4

1

exists 句が必要です。

select userid from users 
where not exists (select * from userroles where userid = users.userid and roleid = 1);

または、すべてのユーザーのセットから、roleid 1 を持つユーザーのセットを減算します。

select userid from users
minus 
select userid from userroles where roleid = 1;
于 2013-10-29T12:07:52.963 に答える
1

それはとても簡単ですか?

select distinct userid from table where UserID <> 1
于 2013-10-29T12:06:01.747 に答える
0

リクエストを編集したので、修正した select ステートメントを次に示します。

select * from usersroles where userid in 
(
  select userid from uprofiles where networkid in 
  (
    select network_id from network where usertype in (469,467,466,468)
  )
)
and userid not in
(
  select userid from usersroles where roleid =1
);

または:

select * from usersroles where userid in 
(
  select userid from uprofiles where networkid in 
  (
    select network_id from network where usertype in (469,467,466,468)
  )
  minus
  select userid from usersroles where roleid =1
);
于 2013-10-29T14:11:34.043 に答える