SQL Server:如何通过UID关联用Candidate表IdCandidate更新Student表IdStudent?
用Candidate表的IdCandidate更新Student表的IdStudent字段
这问题其实挺常见的,咱们核心思路就是通过两张表的UID字段关联,把Candidate里对应的IdCandidate同步到Student的IdStudent中。不同数据库的语法略有区别,我给你列几个常用的写法,你可以根据自己用的数据库来选:
MySQL/MariaDB 写法
直接用UPDATE ... JOIN语法,关联后直接更新字段:
UPDATE Student AS S JOIN Candidate AS C ON S.UID = C.UID SET S.IdStudent = C.IdCandidate -- 要是只想更新当前IdStudent为0的行,就加上下面的WHERE条件 WHERE S.IdStudent = 0;
SQL Server 写法
用UPDATE ... FROM ... JOIN的语法实现:
UPDATE S SET S.IdStudent = C.IdCandidate FROM Student AS S INNER JOIN Candidate AS C ON S.UID = C.UID -- 可选:只针对IdStudent为0的记录更新 WHERE S.IdStudent = 0;
PostgreSQL 写法
PostgreSQL用UPDATE ... SET ... FROM ...的方式:
UPDATE Student AS S SET IdStudent = C.IdCandidate FROM Candidate AS C WHERE S.UID = C.UID -- 可选:过滤出IdStudent为0的行再更新 AND S.IdStudent = 0;
通用子查询写法(兼容大部分数据库)
如果不确定数据库专属语法,也可以用关联子查询,兼容性更强:
UPDATE Student SET IdStudent = ( SELECT C.IdCandidate FROM Candidate AS C WHERE C.UID = Student.UID ) -- 可选:只更新IdStudent为0且有对应Candidate记录的行,避免更新为NULL WHERE IdStudent = 0 AND EXISTS ( SELECT 1 FROM Candidate AS C WHERE C.UID = Student.UID );
需要注意的是,如果不是所有Student的UID都能在Candidate中找到匹配记录,最好加上EXISTS条件或者用INNER JOIN(像前几种写法那样),防止把IdStudent更新成NULL。
内容的提问来源于stack exchange,提问作者ADM
相关产品推荐
相关产品推荐

