mysql 仅获取ID不等于条件且为admin的用户(SQL)

k97glaaz  于 2022-12-03  发布在  Mysql
关注(0)|答案(3)|浏览(143)

我有两个表,用户:
| 标识符|全名|是管理员|
| - -|- -|- -|
| 一个|简|第0页|
| 2个|赫利奥|第0页|
| 三个|弗兰|第0页|
| 四个|米拉|第0页|
| 五个|管理员|一个|
审批人:
| 标识符|下属标识|审批人标识|
| - -|- -|- -|
| 一个|一个|2个|
| 2个|三个|四个|
并且我希望执行一个查询,以显示在approvers表的subordinate_id列中没有id的用户名。
我试着这样说:

SELECT 
    full_name
FROM user AS U 
WHERE NOT EXISTS(
SELECT * FROM approver AS A 
WHERE A.subordinate_id = U.id AND U.is_admin = 0);

但在本例中,管理员用户仍然会加入,我不想加入在usuario表中is_admin列为1的用户。我只想加入普通用户,而不加入管理员。
有人能帮我吗?

vptzau2j

vptzau2j1#

尝试此查询

SELECT full_name FROM user AS U 
left join approver as A on U.id = a.subordinate_id 
where A.id is null AND U.is_admin = 0
wljmcqd8

wljmcqd82#

您需要将AND U.is_admin = 0放在EXISTS之外

create table `user`(
 id int,
 full_name varchar(20),
 is_admin int
);

create table `approver`(
 id int,
 subordinate_id int,
 approver_id int
);

insert into `user`(id,full_name,is_admin) values
(1,'jane',0),
(2,'Helio',0),
(3,'fran',0),
(4,'mila',0),
(5,'admin',1);

insert into `approver`(id,subordinate_id,approver_id) values
(1,1,2),
(2,3,4);

SELECT 
    full_name
FROM user AS U 
 WHERE NOT EXISTS(SELECT A.* FROM approver AS A WHERE A.subordinate_id = U.id )
AND U.is_admin = 0

DB Fiddle Demo

ep6jt1vc

ep6jt1vc3#

你可以尝试这个查询。我们可以在第一个表中选择admin=“0”,然后在第二个表中进行左连接。在这之后,我们可以进行内部连接的逆操作,以获得你所期望的结果。

SELECT fullname
FROM
(SELECT * FROM user WHERE is_admin="0") U
LEFT JOIN Approver A
ON U.id=A.subordinate_id
WHERE A.subordinate_id IS NULL;

相关问题