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

如何从其他MySQL数据库向C_DB.prvn表插入数据并修正SQL语句

修正跨数据库INSERT INTO的执行错误

看起来你在跨数据库插入数据时遇到了两个关键问题:语法错误和ID计算逻辑不符合预期。我来帮你一步步解决:

现有数据库表数据

A_DB.prvn

id (PK, A_I) | dm   | Name
------------|------|------
1           | 1001 | David
2           | 1001 | Sam

B_DB.prvn

id (PK, A_I) | dm   | Name
------------|------|------
1           | 1002 | Bird
2           | 1002 | Cat

期望的C_DB.prvn结果

id   | dm   | Name
-----|------|------
10011| 1001 | David
10012| 1001 | Sam
10021| 1002 | Bird
10022| 1002 | Cat

你的代码存在的问题

  • 语法错误:当使用INSERT INTO结合SELECT查询批量插入数据时,不需要VALUES关键字。VALUES仅适用于插入明确指定的单个/多个值(如VALUES (1, 'a'), (2, 'b')),正确写法是直接使用INSERT INTO ... SELECT ...。
  • ID计算逻辑错误:你使用dm + id会执行数值加法(例如1001+1=1002),但你需要的是将dm与id拼接成新的ID(1001拼接1得到10011)。可以用字符串拼接后转数值的方式,或者如果id始终是个位数,用dm * 10 + id也能实现需求。

修正后的代码

-- 从A_DB插入数据到C_DB
INSERT INTO C_DB.prvn (id, dm, Name)
SELECT 
    CAST(CONCAT(dm, id) AS UNSIGNED) AS new_id,
    dm,
    Name
FROM A_DB.prvn
WHERE CAST(CONCAT(dm, id) AS UNSIGNED) NOT IN (SELECT id FROM C_DB.prvn);

-- 从B_DB插入数据到C_DB
INSERT INTO C_DB.prvn (id, dm, Name)
SELECT 
    CAST(CONCAT(dm, id) AS UNSIGNED) AS new_id,
    dm,
    Name
FROM B_DB.prvn
WHERE CAST(CONCAT(dm, id) AS UNSIGNED) NOT IN (SELECT id FROM C_DB.prvn);

补充说明

  • 如果你的id字段永远是个位数,使用dm * 10 + id会比字符串拼接更高效,例如1001*10+1=10011,结果和字符串拼接完全一致。
  • 保留了你原本的NOT IN判断逻辑,可以有效避免重复插入已存在的数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 07:07:15