You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在SQL中将Names表的name列添加到Customer表并匹配对应行?

解决方法

嘿,这个需求我碰到过好几次啦,咱们一步步来搞定它!

第一步:给Customer表添加name列

先执行这条SQL,给Customer表新增一个name字段(字段类型和长度可以根据你的实际需求调整,比如如果名字可能很长,就把VARCHAR(255)改大一点):

ALTER TABLE Customer ADD COLUMN name VARCHAR(255);

第二步:将Names表的name对应到Customer的id上

这里的关键是给Names表的每一行生成一个和Customer.id对应的序号,因为Names表没有自带的主键,咱们得用行号来匹配。不同数据库的写法略有差异,我给你列几个常见的:

适用于MySQL 8.0+、PostgreSQL、SQL Server、Oracle的写法

用ROW_NUMBER()函数生成行号,然后关联Customer表进行更新:

WITH NumberedNames AS (
    SELECT 
        name, 
        ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) AS row_num
    FROM Names
)
UPDATE Customer
JOIN NumberedNames ON Customer.id = NumberedNames.row_num
SET Customer.name = NumberedNames.name;

注意:ORDER BY (SELECT NULL)是使用Names表中数据的默认存储顺序(也就是你插入数据的顺序)来生成行号。如果需要更严谨的排序逻辑,最好有一个明确的排序字段(比如如果Names表有创建时间列的话),但根据你提供的表结构,只能用默认顺序啦。

适用于MySQL 5.x的写法

因为MySQL 5.x不支持ROW_NUMBER(),咱们可以用变量来生成行号:

SET @row_num = 0;
UPDATE Customer
JOIN (
    SELECT 
        name, 
        (@row_num := @row_num + 1) AS row_num
    FROM Names
) AS NumberedNames ON Customer.id = NumberedNames.row_num
SET Customer.name = NumberedNames.name;

小提醒

执行前最好确认一下Customer表的行数和Names表的行数完全一致,不然会出现部分id没有匹配到name,或者部分name没有被使用的情况哦!

内容的提问来源于stack exchange,提问作者Ruba Sbeih

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 08:17:32