我有一个Client
表和一个Devices
表。
客户端可以拥有多个设备,并且客户端具有活动状态,与设备一样。
我想要所有活跃但没有活动设备的客户端。
我INNER加入了客户端上所有活动客户端的设备,因此客户端不止一次出现,但现在我不知道如何选择所有没有活动设备的客户端。
这就是我的人际关系的设置方式:
客户端:
pkClientID Name IsActive
------------------------------
1 Jake 1
2 Philip 1
设备
pkDeviceID fkClientID DeviceName IsActive
---------------------------------------------
1 1 Samsung 1
2 1 Apple 0
3 2 Samsung 0
4 2 Sony 0
由于我已经拥有所有活跃客户,因此我只选择菲利普,因为他处于活动状态但没有活动设备?
答案 0 :(得分:4)
使用not exists()
:
select *
from client c
where c.isactive = 1
and not exists (
select 1
from device d
where d.fkclientid = c.pkclientid
and d.isactive = 1
)
rextester演示:http://rextester.com/NCR78612
返回:
+------------+--------+----------+
| pkClientid | Name | IsActive |
+------------+--------+----------+
| 2 | Philip | 1 |
+------------+--------+----------+
答案 1 :(得分:2)
使用not in
或not exists
或left join
/ where
:
select c.*
from client c
where c.IsActive = 1 and
not exists (select 1
from devices d
where d.fkClientID = c.ClientID and d.IsActive = 1
);