需要 SQL 帮助。
表格
- 人(身份证,姓名)
- 消息(id,文本)
- PersonMsgResponse(msgID、personID、delMethod、已收到(是/否)
PersonMsgResponse 表的结构
- 消息ID (MsgId)
- 人名 (PerID)
- 消息传递者(DelMethod)
- 已收到(是/否)(已收到)
PersonMsgResponse 表中的示例行
我需要返回未收到消息的人名列表。
我如何设计 SQL 以仅返回尚未通过任何方法收到消息的成员的成员名称?
例如,在上面的记录列表中,我的查询应该只返回成员 1,因为成员 2 通过电话收到消息,而成员 1 没有通过任何一种方法收到消息。
感谢您的帮助。
最佳答案
您可以使用如下所示的 2 个内部查询来完成此操作。诀窍是包括所有接收到“N”但没有“Y”的人。对于此示例,消息表在技术上是不必要的。
SELECT p.Name
FROM Person p
WHERE p.id IN (
SELECT personID
FROM PersonMsgResponse pmr
WHERE pmr.received = 'N' AND pmr.personID NOT IN (SELECT personID FROM PersonMsgResponse pmr WHERE pmr.received = 'Y')
)
返回
Name
person 1
关于mysql - SQL Query基于inner join获取结果集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34270269/