mysql - 比较两个数据库表

标签 mysql

我有两个数据库表,tmp1 和 tmp2

tmp1:

+----+------+---------+---------+
| id | name | add1    | add2    |
+----+------+---------+---------+
| 1  | NULL | NULL    | NULL    |
| 2  | NULL | NULL    | NULL    |
| 3  | mum1 | rajpur1 | rajpur2 |
| 4  | mum3 | rajpur3 | rajpur4 |
| 5  | mum4 | rajpur4 | rajpur5 |
+----+------+---------+---------+

tmp2:

+----+------+---------+---------+
| id | name | add1    | add2    |
+----+------+---------+---------+
| 1  | NULL | NULL    | NULL    |
| 2  | mum  | rajpur  | rajpur1 |
| 3  | NULL | NULL    | NULL    |
| 4  | mum2 | rajpur2 | rajpur3 |
| 5  | mum4 | rajpur4 | rajpur5 |
+----+------+---------+---------+


select a.id 
from tmp1 a 
inner join tmp2 b 
where a.id = b.id 
  and (a.name is NULL or a.add1 is NULL or a.add2 is NULL) 
   or (a.name!=b.name or a.add1!=b.add1 or a.add2!=b.add2);

这里我尝试了上面的代码,结果如下:

+----+
| id |
+----+
| 1  |
| 2  |
| 3  |
| 4  | 
+----+

但它并没有显示我想要的结果。

在这里,我想打印第一个表的 ID,其中一个或多个其他行的值为空,或者一个或多个其他行的值与 tmp2 的那些行值不匹配。

最佳答案

您错过了 ON。正如 The Impaler 敏锐地指出的那样,还需要检查 temp2 中的列是否为 NULL

select a.id 
from tmp1 a 
inner join tmp2 b on a.id=b.id
where coalesce(a.name,a.add1,a.add2,b.name,b.add1,b.add2) is null or
      coalesce(a.name,a.add1,a.add2)<>coalesce(b.name,b.add1,b.add2));

关于mysql - 比较两个数据库表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57895396/

相关文章:

php - 如果大于 0,则计算行数和返回结果

php - mysql --> 年度最大值以及记录 ID 信息

mysql - Yii2 - 违反完整性约束 – yii\db\IntegrityException

mysql - SQL查找一天有最大记录

用于将单个表导出到 SQL 文件的 PHP 脚本

java - 实行预约系统

php - 无法使用 PDO 从 MySQL 中获取多行

PHP MySQLi 插入获取最后一列值加 1

mysql - SSRS取另一个字段的平均IF值相等

mysql - 如何将 jcalendarcombo 日期与默认的 Mysql 日期格式相匹配