我有三个具有以下结构的表:
用户表
UserID Name Age
------ ---- ---
001 AA 23
002 BB 25
003 CC 30
004 DD 24
005 EE 23
temp_User表
UserID Name Age
------ ---- ---
001 AA 23
002 BB 25
004 DD 24
005 EE 23
007 GG 23
009 HH 28
ExceptionUsers表
UserID Status
------ --------
021 Active
002 Inactive
004 Active
010 Active
012 Inactive
我使用以下查询来检索我的结果:
查询
select
A.Name
,B.Name
,A.Age
,B.Age
from User A
inner join temp_User B
on A.UserID = B.UserID
left join ExceptionUsers C
on A.UserID = C.UserID
and C.Status = 'Inactive'
order by
A.Name
结果
001 AA 23
002 BB 25
005 EE 23
但结果包括“活跃”的用户。
001 AA 23
002 BB 25
004 DD 24
005 EE 23
如何尝试查询以获取结果?
答案 0 :(得分:1)
将C.Status ='Inactive'移至where子句。
答案 1 :(得分:0)
Left join
不会过滤加入条件时提供的数据。
因此,您可以将加入条件and C.Status = 'Inactive'
移至where子句,并将其视为inner join
select A.Name, B.Name, A.Age, B.Age
from User A
inner join temp_User B
on A.UserID = B.UserID
left join ExceptionUsers C
on A.UserID = C.UserID
where
C.Status = 'Inactive'
order by A.Name
答案 2 :(得分:0)
您可以使用以下查询获取活动用户的详细信息列表。
select * from temp_User where UserID in (select UserID from ExceptionUsers where Status = 'Inactive')
答案 3 :(得分:0)
我将LEFT JOIN逻辑移动到WHERE子句,转移到NOT EXISTS。
select A.Name, B.Name, A.Age, B.Age
from User A
inner join temp_User B
on A.UserID = B.UserID
where not exists (select * from ExceptionUsers C
where A.UserID = C.UserID
and C.Status = 'active')
order by A.Name