尝试检索用户不存在id的行

时间:2013-10-29 12:00:58

标签: sql oracle

我正在尝试编写一个只返回用户所在位置的查询 没有角色1.

表列是roleid,userid,usertype。 userid具有每个roleid的条目。例如:

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;

我正在使用上述内容,但这会返回没有roleid 1的用户,但仍会返回具有其他角色的用户。我希望查询只返回没有1的用户。

4 个答案:

答案 0 :(得分:1)

这样很容易吗?

select distinct userid from table where UserID <> 1

答案 1 :(得分: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;

答案 2 :(得分:0)

如果你有users表,那么你可以做到:

select ID -- other relevant user fields here
from users
where ID not in (select userId from userRoles where roleId = 1)

如果您没有为用户提供单独的表(即userId字段不是外键),那么您可以这样做:

select distinct userId 
from userRoles
where userId not in (select userId from userRoles where roleId = 1)

在这两种情况下,子查询select userId from userRoles where roleId = 1将为您提供具有1角色的用户列表,您只需确保该用户的ID不在该列表中。

答案 3 :(得分:0)

现在您已经编辑了您的请求,这是您更正的选择语句:

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