SQL Server中基于列名与ID匹配为table1新增关联results列
实现table1与table2的关联更新逻辑
你的问题核心是缺少列名与对应值的匹配条件,以下是修正后的完整SQL语句:
-- 为table1新增results列 ALTER TABLE table1 ADD results text; -- 关联table2并匹配条件更新results列 UPDATE table1 SET results = table2.result FROM table1 JOIN table2 ON table1.ID = table2.ID AND ( -- 当table1的a列非空时,匹配table2的列名'a'和对应值 (table1.a IS NOT NULL AND table2.[Column Name] = 'a' AND table2.[Column Value] = table1.a) -- 当table1的b列非空时,匹配table2的列名'b'和对应值 OR (table1.b IS NOT NULL AND table2.[Column Name] = 'b' AND table2.[Column Value] = table1.b) -- 当table1的c列非空时,匹配table2的列名'c'和对应值 OR (table1.c IS NOT NULL AND table2.[Column Name] = 'c' AND table2.[Column Value] = table1.c) );
关键逻辑说明:
- 用
OR分支覆盖table1每行唯一非空列的场景,确保仅匹配table2中ID一致、列名对应、值相等的记录 - 带空格的列名
Column Name必须用方括号[]包裹,避免SQL语法错误 - 由于table1每行仅有一个非空列,三个分支只会触发其中一个,不会出现多匹配冲突
内容的提问来源于stack exchange,提问作者AlyT
相关产品推荐
相关产品推荐

