我正在尝试使用其他数据库插入表格。
我有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)
)
请帮助解决问题
答案 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))