如何用同表同行列值更新NA字段?是否需使用JOIN?
问题解答
你的第二个UPDATE语句是完全正确且高效的,完全不需要使用JOIN操作。
为什么不需要自关联JOIN?
你要实现的是同表同一行内的字段赋值:把当前行中File_number的值,替换掉同一行里File_num为"NA"的内容。这种场景下,直接引用当前行的字段即可,额外的自关联完全是冗余操作,还可能带来问题:
- 平白增加数据库查询的计算开销
- 如果
accession字段存在重复值,会导致同一行被多次匹配,引发不必要的重复更新,甚至锁表异常
最优写法
根据你使用的数据库,还可以进一步简化语句:
SQL Server / PostgreSQL
UPDATE table_name SET File_num = File_number WHERE File_num = 'NA'
(注:可以省略别名,因为不需要关联其他表)
MySQL
UPDATE table_name SET File_num = File_number WHERE File_num = 'NA';
额外注意事项
- 如果
File_num中的空值实际是NULL而非字符串"NA",WHERE条件要改为WHERE File_num IS NULL - 执行更新前建议先通过SELECT语句验证范围:
SELECT File_num, File_number FROM table_name WHERE File_num = 'NA'
内容的提问来源于stack exchange,提问作者Dave M
相关产品推荐
相关产品推荐

