mysql - 左连接 - 当仍然存在类似的记录拟合匹配条件时,尝试在第二个表中查找丢失的记录

标签 mysql sql sql-server-2008 select join

我有 2 张 table

表1

  • 消息类型
  • ID

表2

  • 消息类型
  • ID

我想在以下情况下查找表 2 中缺失的记录:

  1. 请求在表 1 和表 2 中记录为:

表1:
消息类型:请求发送
编号:1

表2:
消息类型:已收到请求
编号:1

  • 然后发送响应,并且仅将其记录在表 1 中。
  • 表1:
    消息类型:响应发送
    编号:1

    表2:

    没什么

    现在我加入寻找表 2 中缺失的回复:

    select t1.ID 
    from Table1 as t1 
    left join Table2 as t2 on t1.ID=t2.ID 
    where t2.ID is null 
    and t2.MessageType<>'Request Received'
    

    不幸的是我得到了 0 行。我猜是因为有 t2 记录具有匹配的 ID,但它通过 MessageType 条件将其过滤出来。我该如何解决这个问题?

    最佳答案

    一个简单的 not contains 子句就足够了:

    select *
      from table1 t1
     where not exists (select null
                         from Table2 t2
                        where t2.id = t1.id)
    

    关于mysql - 左连接 - 当仍然存在类似的记录拟合匹配条件时,尝试在第二个表中查找丢失的记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37576993/

    相关文章:

    一列中有多个值的 SQL 查询

    c# - 如何根据事件触发 SSRS 订阅?

    javascript - 如何在存储过程中使用表值作为参数?

    MySQL 按组对记录进行编号 - 我遇到错误了吗?

    php - 如何使用php在mysql中获取最大数

    php - 选择加入mysql 2个数据库

    mysql - 为什么不建议在 SQL 中使用 "LIKE"?

    sql - 如何在 SQL Server 2008 中从选择查询结果创建表

    mysql - 理解 Sequelize 中用于急切加载的关联时出现问题

    python - PySQLPool 和 Celery,正确的使用方法?