我有两个数据库表,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/