如何在其他数据库的mysql中插入值

时间:2018-05-27 07:03:50

标签: mysql

我正在尝试使用其他数据库插入表格。

我有3个名为A_DB,B_DB和C_DB

的数据库

在每个数据库中,我都有一个名为prvn的表,其中包含以下列和值:

--------------------------------------------------
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

现在我想将A_DB和B_DB中的值插入到C_DB中,就像这样

C_DB. prvn : 
id             |   dm   |   Name  |
10011              1001     David
10012              1001     Sam
10021              1002     Bird
10022              1002     Cat

我使用此代码但不起作用:

INSERT INTO C_DB.prvn (id, dm, Name) VALUES (
SELECT (dm + id), dm, Name FROM A_DB.prvn 
WHERE (A_DB.prvn.id + A_DB.prvn.dm) NOT IN (SELECT id FROM C_DB.prvn)
)

INSERT INTO C_DB.prvn (id, dm, Name) VALUES (
SELECT (dm + id), dm, Name FROM B_DB.prvn 
WHERE (B_DB.prvn.id + B_DB.prvn.dm) NOT IN (SELECT id FROM C_DB.prvn)
)

请帮助解决问题

1 个答案:

答案 0 :(得分:2)

而不是dm + id执行dm * 10 + id来获取新表中的唯一ID值。

不确定为什么你有WHERE子句,你多次这样做?如果是这样,你当然也需要在WHERE子句中乘以10。

<强>更新

您的INSERT INTO存在语法问题,它应该类似于

INSERT INTO C_DB.prvn (id, dm, name) 
SELECT (dm * 10 + id) as new_id, dm, name FROM A_DB.prvn
WHERE (A_DB.prvn.id + A_DB.prvn.dm * 10) NOT IN (SELECT id FROM C_DB.prvn)

更新#2

另一种选择是让新表中的主键成为varchar,然后构建一个具有固定格式的字符串,假设列dm对于每个原始表都是唯一的,则更容易保持pk唯一。

然后INSERT可以更改为

INSERT INTO prvn (new_id, dm, name) 
SELECT CONCAT(dm,'-', id), dm, name FROM A_DB.prvn AS a
WHERE NOT EXISTS(SELECT * FROM C_DB.prvn WHERE id = CONCAT(a.dm,'-', a.id))