如果db表名称使用此数据
Client|Task |Status
A |Clean office |Done
A |Paint the wall|Issue
A |Read mail |Done
B |Fix PC |Done
B |Buy Parts |Done
我的查询是
SELECT * FROM `WORK` where Status = "Done"
我想只显示已完成的任务,但如果客户端的记录不是“Status = Done”,我不想同时获取他的记录(即使那些已完成状态的人) 而且我只会得到两个客户B记录,因为它们都已完成。
答案 0 :(得分:1)
您可以使用NOT IN()函数:
SELECT * FROM `Work` t
WHERE t.Client NOT IN(SELECT distinct s.Client FROM `Work` s
WHERE s.status <> 'Done')
这样您只选择那些只有“完成”状态的人。
您也可以使用LEFT JOIN这样做:
SELECT * FROM `work` t
LEFT JOIN(SELECT * from `work` where status <> 'Done') s
ON(t.Client = s.Client)
WHERE s.Client is null
答案 1 :(得分:-2)
您可以这样使用NOT IN
:
select * from Work where status='Done' and Client NOT IN(SELECT DISTINCT Client FROM Work
WHERE status != 'Done');