我有两个结构相同的表,table2是新数据的分段,将用于批量更新table1。
我需要找出table1中要更新的行。我想忽略那些将被插入的行和那些将被删除的行。我只对更新的行感兴趣,其中主键保持不变,但行中的一个或多个其他字段包含不同的数据。
到目前为止,我最接近的是以下声明。
SELECT table2.* FROM table2
INNER JOIN table1
ON table1.primarykey = table2.primarykey
WHERE table1.field1 != table2.field1
OR table1.field2 != table2.field2
OR table1.field3 != table2.field3
返回0行。
编辑:查询实际上有效。数据本身存在问题。我要去看看一段时间。
感谢大家的意见。
答案 0 :(得分:4)
你不考虑的一件事是空的。这可能是您的问题,也可能不是,因为它取决于数据
SELECT table2.* FROM table2
INNER JOIN table1
ON table1.primarykey = table2.primarykey
WHERE table1.field1 != table2.field1
OR table1.field2 != table2.field2
OR table1.field3 != table2.field3
OR (table1.field1 is null and table2.field1 is not null)
OR (table2.field1 is null and table1.field1 is not null)
OR (table1.field2 is null and table2.field2 is not null)
OR (table2.field2 is null and table1.field2 is not null)
OR (table1.field3 is null and table2.field3 is not null)
OR (table2.field3 is null and table1.field3 is not null)
答案 1 :(得分:0)
换句话说,你想在table2中计算有多少行的主键与table1中的相同,并且至少有一个字段不同,对吧?但是,如果数据不同,重要性如何?如果数据相同,UPDATE将无效。
SELECT
COUNT(T2.*)
FROM
table2 AS T2
JOIN table1 AS T1 ON (T1.primarykey = T2.primarykey);