比较两个数据库表

时间:2019-09-11 19:05:26

标签: 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,其中一个或多个其他行的值为null或一个或多个其他行的值与tmp2的那些行值不匹配。

2 个答案:

答案 0 :(得分:1)

您错过了actualData map ((object,index) -> { (object mapObject (value,key) -> {(mappings[key]):value}) } 。正如Impaler所指出的那样,还需要检查temp2中的列是否为ON

NULL

答案 1 :(得分:1)

您缺少指定如何联接表的ON子句。另外,您的搜索条件不完整。

select a.id
from tmp1 a
join tmp1 b on a.id = b.id
where a.name is null or a.add1 is null or a.add2 is null
   or b.name is null or b.add1 is null or b.add2 is null
   or (a.name <> b.name or a.add1 <> b.add1 or a.add2 <> b.add2)
相关问题