A
ID NAME
--------------
1 A
B
USER_ID role
--------------
1 ADMIN
1 USER
1 ROLE2
如果我使用A LEFT JOIN B where role!='admin'
我得到2个结果。
但是,如果我不希望用户1的结果,因为一个用户的记录不匹配会怎样?
答案 0 :(得分:1)
您可以使用NOT EXISTS:
的查询SELECT A.*, B.*
FROM
A INNER JOIN B
ON A.ID = B.USER_ID
WHERE
NOT EXISTS (SELECT * FROM B AS b2 WHERE b2.USER_ID = A.ID AND b2.ROLE = 'ADMIN')
答案 1 :(得分:1)
问题其实不清楚。根据我从数据中理解的内容,
如果用户ID(在他的情况下为'1')是管理员,则他不想返回任何用户ID为“1”的记录。所以让我们稍微扩展这个表。
A
ID NAME
--------------
1 A
B
USER_ID role
--------------
1 ADMIN
1 USER
1 ROLE2
2 NOTADMIN
2 ROLE3
您可以使用以下查询过滤掉您不想要的记录。
select X.id, Y.id, Y.Role from table_A as Y
Left Join
( select B.id, B.Role from table_B as B join ( select id from table_B where Role = 'admin' ) as A on A.id != B.id ) as X
on (x.id = Y.id)
然后你只得到:
2 NOTADMIN
2 ROLE3
希望这会有所帮助..
答案 2 :(得分:0)
看起来你想要一个子查询。
Select * from A
where ID not in (select USER_ID from B where role = 'ADMIN')
如果只想要B中有角色的结果,可以添加内部联接:
Select * from A
Inner join B on A.ID = B.User_ID
where A.ID not in (select B2.USER_ID from B B2 where B2.role = 'ADMIN')
将结果限制为表B中具有匹配项的结果和没有ADMIN角色的结果。