MySQL 查询仅当所有行都具有不同值时才返回具有相同值的所有行

Dar*_*Dar 2 mysql join

如果有一个数据库表名可使用此数据

Client|Task          |Status
A     |Clean office  |Done
A     |Paint the wall|Issue
A     |Read mail     |Done
B     |Fix PC        |Done
B     |Buy Parts     |Done
Run Code Online (Sandbox Code Playgroud)

我的查询是

SELECT * FROM `WORK` where Status = "Done"
Run Code Online (Sandbox Code Playgroud)

我只想显示已完成的任务,但如果客户的记录不是“状态 = 完成”,我不想获取他的任何记录(即使是那些已完成状态的记录)而且我只会得到两个客户 B记录,因为他们都完成了。

sag*_*agi 5

您可以为此使用 NOT IN() 函数:

SELECT * FROM `Work` t
WHERE t.Client NOT IN(SELECT distinct s.Client FROM `Work` s
                      WHERE s.status <> 'Done')
Run Code Online (Sandbox Code Playgroud)

这样您就可以只选择那些只有“完成”状态的项目。

您还可以使用 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
Run Code Online (Sandbox Code Playgroud)