【问题标题】:Difference between two identical tables in mysqlmysql中两个相同表之间的区别
【发布时间】:2019-02-26 04:48:26
【问题描述】:

我有两个定义完全相同但行数不同的表。有五个字段是表的部分键(这是两个表的主键)。我想找到在一个表中但没有在另一个表中的行。我尝试按如下方式使用存在,但没有奏效。

select * from table1 where not exists (select * from table2)

这些表的创建语句完全相同,但行数不同。我不知道是否可以通过使用连接来找到差异。谢谢!

【问题讨论】:

  • 是否有任何列包含NULL 值的可能性?

标签: mysql sql join select inner-query


【解决方案1】:

试试 LEFT JOIN ... IS NULL 模式。

SELECT a.* 
  FROM table1 a
  LEFT JOIN tableb b 
        ON a.f1 = b.f1 
       AND a.f2 = b.f2
       AND a.f3 = b.f3
       AND a.f4 = b.f4
       AND a.f5 = b.f5
 WHERE b.f1 IS NULL

这是因为 LEFT JOIN 在 b 中找不到匹配行时,会在其结果集中返回来自 a 的数据,但对于 b 中的值返回 NULL。

ON 条件看起来很复杂。但查询规划器知道字段已编入索引,所以它做正确的事。

【讨论】:

  • 它没有用。它返回一个空集。你知道其他方法吗?谢谢!
  • @SandeshTiwari 这应该可以。也许额外的行在 tableb 中,而不是 tablea?
  • @SandeshTiwari。 . .再试一次。 where 子句中有错字。
  • 它起作用了..我在 where 子句中写的是 a 而不是 b ..谢谢大家!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-30
  • 2012-12-13
  • 1970-01-01
  • 2014-09-24
  • 2017-09-26
  • 1970-01-01
相关资源
最近更新 更多