我正在尝试编写一个只返回用户所在位置的查询 没有角色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的用户。
答案 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
);