MySQL查询只有在所有行具有相同的值时才返回具有相同值的所有行

时间:2016-02-07 09:57:41

标签: mysql join

如果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记录,因为它们都已完成。

2 个答案:

答案 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');