我有两个表,一个源和一个目的地。如果源列中的任何相应列不同,我想标记要更新的目标表。列可以为空。
目前这似乎很笨拙:
UPDATE destination d
JOIN source s
ON d.id = s.id
SET d.updateFlag = 1
WHERE ( (d.col1 IS NULL AND s.col1 IS NOT NULL)
OR (d.col1 IS NOT NULL AND s.col1 IS NULL)
OR (d.col1 <> s.col1)
)
OR
( (d.col2 IS NULL AND s.col2 IS NOT NULL)
OR (d.col2 IS NOT NULL AND s.col2 IS NULL)
OR (d.col2 <> s.col2)
)
...etc...
OR
( (d.colN IS NULL AND s.colN IS NOT NULL)
OR (d.colN IS NOT NULL AND s.colN IS NULL)
OR (d.colN <> s.colN)
)
理想情况下,我可以做类似的事情:
UPDATE destination d
JOIN source s
ON d.id = s.id
SET d.updateFlag = 1
WHERE HASH(d.col1,d.col2,...etc...,d.colN) <> HASH(s.col1,s.col2,...etc...,s.colN)
一些额外的信息。这些列都是不同的数据类型(一些整数、一些位、一些字符串),我们使用的是 MySQL 5.1 的风格。