匹配ID从Table2更新Table1失败,VendorActive列无变化求协助
解决SQL更新同步无效果的问题
看起来你是想通过ID匹配,把Table1的VendorActive列同步成tbleTemporary表的F7值,但当前脚本执行后没动静对吧?我碰到过不少类似的情况,通常是这几个原因导致的,给你一步步排查和解决的方案:
第一步:先确认ID是否真的能匹配上
很多时候更新没效果,根本原因是两个表的ID没有匹配的行。你可以先跑这条查询验证:
SELECT t1.ID, t1.VendorActive, t2.F7 FROM Table1 t1 JOIN tbleTemporary t2 ON t1.ID = t2.ID
如果这条查询返回0行,那说明:
- 两个表的ID数据类型不匹配(比如一个是
INT,一个是VARCHAR) - ID值存在隐形空格、大小写差异(比如字符串类型的ID,
"123"和" 123"、"123"和"123 ") - 两个表确实没有相同的ID值
这时候得先把ID匹配的问题解决,更新才能生效。
第二步:检查更新语句的语法是否正确
不同数据库的UPDATE JOIN语法差异很大,写错了可能不会报错,但就是不更新。给你列几个主流数据库的正确写法:
SQL Server / MS Access
UPDATE t1 SET t1.VendorActive = t2.F7 FROM Table1 t1 INNER JOIN tbleTemporary t2 ON t1.ID = t2.ID
MySQL
UPDATE Table1 t1 INNER JOIN tbleTemporary t2 ON t1.ID = t2.ID SET t1.VendorActive = t2.F7
PostgreSQL
PostgreSQL用UPDATE ... FROM的语法:
UPDATE Table1 t1 SET VendorActive = t2.F7 FROM tbleTemporary t2 WHERE t1.ID = t2.ID
额外注意事项
- 确保
VendorActive和F7的数据类型兼容,比如都是布尔型、整数型或者字符串型,如果类型不匹配,有些数据库会静默失败(不报错但不更新) - 可以先跑这条语句确认要更新的行数,心里有数:
SELECT COUNT(*) FROM Table1 t1 JOIN tbleTemporary t2 ON t1.ID = t2.ID
如果结果大于0,再执行更新就没问题了
- 如果你原来的更新语句加了额外的
WHERE条件,检查一下是不是不小心把所有匹配的行都过滤掉了
内容的提问来源于stack exchange,提问作者Maldred
相关产品推荐
相关产品推荐

