如何使用SQL UPDATE实现同表同列不同行的字段值按条件复制
同表字段值复制SQL实现方案
原SQL存在的问题
- 字段拼写错误:多处将
TYPE字段误写为TPYE - 语法错误:内层MISC子查询的SELECT字段列表缺少逗号分隔,无法正常执行
- 别名冲突:外层UPDATE表别名和子查询内表别名重复,会引发逻辑匹配错误
- 关联条件不符合需求:原SQL用ID字段关联,与你提出的「通过NUMBER和TYPE关联」的需求不符
修正后的SQL(适配SQL Server 语法)
你要的逻辑是:匹配TYPE='MISC'和TYPE='PDF'且NUMBER字段值相同的行,将MISC行的description值覆盖到PDF行的同名字段,修正后语句如下:
UPDATE t_pdf SET t_pdf.description = t_misc.description FROM [DB1] t_pdf INNER JOIN [DB1] t_misc ON t_pdf.NUMBER = t_misc.NUMBER AND t_misc.TYPE = 'MISC' WHERE t_pdf.TYPE = 'PDF'
注意事项
执行更新前建议先执行SELECT语句验证匹配结果是否正确,避免误改数据:
SELECT t_pdf.NUMBER, t_pdf.description AS 原值, t_misc.description AS 要覆盖的值 FROM [DB1] t_pdf INNER JOIN [DB1] t_misc ON t_pdf.NUMBER = t_misc.NUMBER AND t_misc.TYPE = 'MISC' WHERE t_pdf.TYPE = 'PDF'
如果数据量较大,可分批执行更新避免锁表。
内容的提问来源于stack exchange,提问作者the-jay
相关产品推荐
相关产品推荐

