如何比较两个结构相同的表的所有行值

时间:2016-05-18 02:56:28

标签: plsql

我想比较两个表中的所有行,如下所示。

TABLEA(ID,NAME,电子邮件,移动,ADDRESS), TABLEB(ID,NAME,电子邮件,移动,ADDRESS)。

这里我有上面的表格,每个表格都有20列。

当一个新行插入表中时,我需要比较两个表中新插入的行,如果有任何列不匹配,则将其放入另一个表中。

例如: TABLEA(1234,ABCDEF,78699EE7,印度) TABLEB(1234,ABCDEF,78699876,印度) 以上手机号码不匹配,我需要将列名称Mobile插入另一个表格。

请帮我解决这个问题。 谢谢。

1 个答案:

答案 0 :(得分:0)

我确信没有办法做到这一点。但只有一种方法是使用SQL UNION ALL使用SQL:

INSERT INTO your_other_table(id, name, email, mobile, address) 
     SELECT id, name, email, mobile, address
       FROM tableA
     UNION ALL
     SELECT id, name, email, mobile, address
       FROM tableB;

然而,目前尚不清楚,何时你需要运行它。由于INSERT发生在两个表中,它是否发生在同一个事务中。如果是这样,那么上面的脚本可以包含在触发器中。如果INSERT发生在不同的事务中并且总是以相同的顺序(例如tableA然后是tableB),那么你可以再次将它包装在tableB的触发器中。否则,您必须单独运行它。

注意,上面的脚本将比较整个表,而不仅仅是新插入的行。因此,如果任何一个表中的任何行发生任何更新,而不是另一个表中的任何行,则该行也将插入第三个表中。