mysql - SQL Query基于inner join获取结果集

标签 mysql sql inner-join

需要 SQL 帮助。

表格

  • 人(身份证,姓名)
  • 消息(id,文本)
  • PersonMsgResponse(msgID、personID、delMethod、已收到(是/否)

PersonMsgResponse 表的结构

  • 消息ID (MsgId)
  • 人名 (PerID)
  • 消息传递者(DelMethod)
  • 已收到(是/否)(已收到)

PersonMsgResponse 表中的示例行

Example Rows within PersonMsgResponse table

我需要返回未收到消息的人名列表。

我如何设计 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/

相关文章:

php - MYSQL : Two tables "Signup" and "Login" ? 做成一个表好还是两个不同的表好

java - 如何从 SELECT 查询(而不是表)中显示列?

python - 如何使用 Python Msqldb 模块?代替 %s 作为查询参数?

mysql - 两次连接或不连接-查询2个表

MySQL:如何使用 LEFT JOIN 结果进行 INNER JOIN

MySQL "join as"?

php - 从日期特定日期范围中选择 MySQL 记录

sql - 按 id 和第二列分组

MySQL超长查询,内连接

mysql - 4个表的内连接