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