我在不同数据库(WAMP服务器)中有两个具有相同结构的表。我想从第一个数据库(newkt
)复制到第二个数据库(oldkt
)所有第二个数据库中不存在的行(oldkt
)。
newkt -> table : users (1500 records) (id, name, password)
oldkt -> table : users (1200 records) (id, name, password)
我想实际向oldkt
数据库中添加行,但{id}}中的id不存在。
此外,如果我有超过3列,可以自动添加这些列,还是必须标记所有列?
答案 0 :(得分:7)
您可以执行以下操作:
insert into database1.table select * from database2.table where id not in(select id from database1.table);
答案 1 :(得分:0)
如上所述,您应该能够通过在查询中指定数据库名称来执行典型插入:
SELECT *
INTO TargetDatabase.dbo.TargetTable
FROM SourceDatabase.dbo.SourceTable
答案 2 :(得分:0)
请尝试以下代码:
INSERT INTO TargetDatabase.dbo.TargetTable
SELECT * FROM SourceDatabase.dbo.SourceTable
EXCEPT
SELECT * FROM TargetDatabase.dbo.TargetTable
答案 3 :(得分:0)
INSERT INTO oldkt
SELECT id , name ,password FROM newkt WHERE id NOT IN (SELECT id FROM oldkt )
答案 4 :(得分:0)
尝试此查询
INSERT Table2
SELECT * FROM Table1
WHERE [Conditions]
答案 5 :(得分:0)
免责声明:OP最初将问题标记为mysql和sql-server。我为两者提供了答案,因为它是一个比纯粹的MySQL更通用的解决方案。 使用MySQL时,请务必使用..
替换查询中的.
。
SELECT … INTO table
does not work in MySQL(虽然it works in SQL Server)所以INSERT … SELECT
会帮助您。它适用于MySQL和SQL Server。
您可以在SQL Server中使用.
(点)分隔符in MySQL和..
(双点)分隔符指定包含数据库名称的表名。 (另见a related question。)
EXCEPT
does not work in MySQL所以我们将使用LEFT JOIN
和WHERE
。 (另见a related question。)
对于SQL Server:
INSERT INTO oldkt..users
SELECT newkt..users.*
FROM
newkt..users
LEFT JOIN oldkt..users USING(id)
WHERE
oldkt..users.id IS NULL
在MySQL中使用时,只需将..
替换为.
。
我的解决方案在假设id
是两个表中的唯一键的情况下工作。 (主键始终是唯一的。)如果不满足,则必须根据该事实调整连接条件。