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

SQLite如何批量插入多行数据 部分字段值来源于其他关联表

SQLite批量插入用户偏好数据解决方案

你之前的写法存在两个核心问题:

  1. 标量子查询套在VALUES中仅会返回第一条匹配结果,因此不会为所有用户生成对应记录
  2. 第三个插入语句中引用了还未完成插入的tiki_user_preferences表字段,因此触发字段不存在报错

正确实现方案

使用INSERT ... SELECT配合UNION ALL批量生成所有需要插入的行,无需拼接VALUES,写法如下:

INSERT INTO tiki_user_preferences ("user", prefName, value)
-- 插入所有用户的user_information配置
SELECT login, 'user_information', 'private' FROM users_users
UNION ALL
-- 插入所有用户的mailCharset配置
SELECT login, 'mailCharset', 'utf8' FROM users_users
UNION ALL
-- 插入所有用户的realName配置,关联session_attribute取对应姓名
SELECT u.login, 'realName', s.value 
FROM users_users u
INNER JOIN session_attribute s 
  ON u.login = s.sid 
  AND s.name = 'name';

兼容优化(可选)

如果需要兼容未在session_attribute表中存储姓名的用户,避免这类用户漏插入realName记录,可以将第三段查询修改为左连接加默认值:

SELECT u.login, 'realName', COALESCE(s.value, u.login)
FROM users_users u
LEFT JOIN session_attribute s 
  ON u.login = s.sid 
  AND s.name = 'name'

防重复插入优化(可选)

如果需要避免重复插入相同的偏好配置,可以把开头的INSERT修改为INSERT OR IGNORE:

INSERT OR IGNORE INTO tiki_user_preferences ("user", prefName, value)
-- 后续UNION ALL部分和上述写法完全一致

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.09 09:45:02