如何将一表列值复制到另一表同用户名匹配的对应列?
问题分析与解决方案
你用INSERT语句是错的——INSERT是往表新增行,而你的需求是更新Table1中已有行的指定列值,同步Table2中同username对应的数据,所以得用UPDATE语句。
正确写法1:使用JOIN关联两表(推荐,性能更好)
适用于SQL Server、PostgreSQL等:
UPDATE Table1 SET Table1.columnName = Table2.columnName FROM Table1 INNER JOIN Table2 ON Table1.username = Table2.username;
适用于MySQL:
UPDATE Table1 INNER JOIN Table2 ON Table1.username = Table2.username SET Table1.columnName = Table2.columnName;
正确写法2:使用子查询
如果你的数据库对JOIN UPDATE支持有限,可以用这种方式:
UPDATE Table1 SET columnName = ( SELECT columnName FROM Table2 WHERE Table2.username = Table1.username ) WHERE EXISTS ( -- 只更新Table2中存在对应username的行 SELECT 1 FROM Table2 WHERE Table2.username = Table1.username );
为什么原来的INSERT不生效?
INSERT的作用是向Table1添加全新的记录,你在WHERE里写[Table1].username = [Table2].username时,Table1里还没生成新行,根本没法和Table2的username匹配,自然不会有任何数据被插入(除非刚好有完全重合的行,但这也不是你要的更新效果)。
内容的提问来源于stack exchange,提问作者Roland
相关产品推荐
相关产品推荐

