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

如何批量向user_settings表插入users表的first_name、last_name对应记录?

批量插入用户设置记录的SQL解决方案

我来给你提供一个直接满足需求的SQL语句,完美适配你描述的场景:

INSERT INTO user_settings (user_id, locale, value_name, value)
SELECT 
    user_id,
    'en_us' AS locale,
    'first_name' AS value_name,
    first_name AS value
FROM users
UNION ALL
SELECT 
    user_id,
    'en_us' AS locale,
    'last_name' AS value_name,
    last_name AS value
FROM users;

语句说明

这个SQL的核心思路是通过UNION ALL把两个查询结果合并,一次性生成所有需要插入的记录:

  1. 第一个SELECT语句从users表中取出每个用户的user_id、固定的locale值en_us、标识字段first_name,以及对应用户的first_name值;
  2. 第二个SELECT语句同理,生成对应last_name的记录;
  3. UNION ALL会把这两个结果集合并成一个包含两倍于users表行数的数据集,最后通过INSERT INTO批量插入到user_settings表中。

可选优化:处理重复记录

如果user_settings表中可能已经存在相同的user_id + locale + value_name组合的记录(比如之前插入过),直接执行上面的语句会触发唯一性约束报错。这种情况下,你可以给user_settings添加(user_id, locale, value_name)的复合唯一索引,然后使用ON DUPLICATE KEY UPDATE来覆盖已有记录的value值:

INSERT INTO user_settings (user_id, locale, value_name, value)
SELECT 
    user_id,
    'en_us' AS locale,
    'first_name' AS value_name,
    first_name AS value
FROM users
UNION ALL
SELECT 
    user_id,
    'en_us' AS locale,
    'last_name' AS value_name,
    last_name AS value
FROM users
ON DUPLICATE KEY UPDATE value = VALUES(value);

这样如果遇到重复的组合,就会用users表中的最新值更新user_settings里的对应记录,而不是报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 08:20:31