我有两个数据库表,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。正如Impaler敏锐地指出的,temp2中的列也需要检查NULL

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

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

10-11 21:40