如何基于StudentCode匹配更新SQL Server的StudentTable中Class字段
解决SQL Server关联表更新问题
你之前用INSERT语句是错的——因为你要的是更新已有记录,不是插入新数据,必须用UPDATE语句。另外原语句的WHERE条件语法完全不符合SQL规范,正确的做法是通过StudentCode关联两张表来匹配需要更新的记录。
方法一:UPDATE...FROM写法(SQL Server常用高效写法)
这是SQL Server里更新关联表最直接的方式:
UPDATE st SET st.Class = ct.Class FROM StudentTable st INNER JOIN ClassTable ct ON st.StudentCode = ct.StudentCode -- 可选:如果只想更新Class为Null的记录,加上这句 WHERE st.Class IS NULL
方法二:子查询写法
要是你更习惯子查询的逻辑,也可以这么写:
UPDATE StudentTable SET Class = ( SELECT Class FROM ClassTable WHERE ClassTable.StudentCode = StudentTable.StudentCode ) WHERE EXISTS ( SELECT 1 FROM ClassTable WHERE ClassTable.StudentCode = StudentTable.StudentCode )
原语句错误点说明
- 误用
INSERT:INSERT是新增记录用的,你要修改已有行的字段值,得用UPDATE - WHERE条件语法错误:
StudentCode IN ([StudentTable]) = StudentCode in ([ClassTable])完全不是正确的SQL语法,关联两张表得用JOIN或者子查询里的字段匹配关系
用上面任意一种语句,你的测试数据里StudentTable的Class字段都会被更新成A。
内容的提问来源于stack exchange,提问作者Kibofigs
相关产品推荐
相关产品推荐

