2014-09-02 104 views
0

我现在有1500万旧记录(表1)的11万个新的记录(表2)和一个空表中的另一表的表进行比较(表3)。插入到表基于其他两个表

两个表1表2共享数据 - 我想找到table1的表中不存在的表2的记录,然后insert到这些表3

到目前为止,我有以下的(这是返回上table3.uniqueCode错误未知列):

INSERT INTO table3 
SELECT * FROM table1 
WHERE table1.uniqueCode != table2.uniqueCode 

我要指出,Table 1和Table不具有相同的结构,但两者有场uniqueCode,这不是一个KEY,而只是一个字面上唯一的字符串代码。

任何帮助将非常感谢,我已经看着使用JOIN声明,但我也遇到了这种方法的错误。

谢谢!

更新 - 已回答

答案很简单:

INSERT INTO table3 
(SELECT * FROM table1 
WHERE uniqueCode not in (Select uniqueCode from table2)) 

有丰富的用于不同的答案低于裁缝略有不同的情况。请看看这些,因为它们可能会解决您可能会遇到的一些轻微变化的问题。 :)

+1

您可以加入表说明('DESCRIBE table1','DESCRIBE table2','DESCRIBE table3')? – BlitZ 2014-09-02 08:26:13

+0

你需要查询Mysql还是Sql-Server? – faster2b 2014-09-02 09:07:41

+0

我正在通过mySQL命令行客户端运行这些查询。谢谢! – Chuck 2014-09-02 09:22:52

回答

0

如果表具有相同的结构:

INSERT INTO table3 
(SELECT * FROM table1 
WHERE uniqueCode not in (Select uniqueCode from table2)) 
+0

这对我来说是第一次工作,是第一个答案,简单而有效。谢谢!虽然我会补充 - 'struktur'应该拼成'结构'。 – Chuck 2014-09-03 08:31:25

0

可以尝试在SQL这

INSERT INTO table3 (uniqueCode) 
SELECT t2.uniqueCode FROM table2 WHERE t2.uniqueCode 
NOT IN 
(SELECT t3.uniqueCode FROM table3 t3 WHERE t3.uniqueCode = t2.uniqueCode) 

编辑

INSERT INTO table3 (uniqueCode) 
SELECT t2.uniqueCode FROM table2 WHERE t2.uniqueCode 
NOT IN 
(SELECT t1.uniqueCode FROM table1 t1 WHERE t1.uniqueCode = t2.uniqueCode) 
+0

table3是空的 – 2014-09-02 08:41:17

+0

那么这是什么情况WHERE table2.uniqueCode!= table3.uniqueCode? – 2014-09-02 08:43:35

0

使用MERGE语句。见例如通过一步http://technet.microsoft.com/en-in/library/bb522522(v=sql.105).aspx

BEGIN TRAN; 
MERGE Target AS T 
USING Source AS S 
ON (T.EmployeeID = S.EmployeeID) 
WHEN NOT MATCHED BY TARGET AND S.EmployeeName LIKE 'S%' 
    THEN INSERT(EmployeeID, EmployeeName) VALUES(S.EmployeeID, S.EmployeeName) 
WHEN MATCHED 
    THEN UPDATE SET T.EmployeeName = S.EmployeeName 
WHEN NOT MATCHED BY SOURCE AND T.EmployeeName LIKE 'S%' 
    THEN DELETE 
OUTPUT $action, inserted.*, deleted.*; 
ROLLBACK TRAN; 
0

步骤:
首先我们应在不存在table2table1选择记录(根据你的问题)
如果uniqueCode是一个唯一的代码(KEY),则:

SELECT * FROM table1 WHERE uniqueCode NOT IN (SELECT uniqueCode FROM table2)

现在我们应该将这些结果插入到table3,所以:

INSERT INTO table3 
SELECT * FROM table1 WHERE uniqueCode NOT IN (SELECT uniqueCode FROM table2) 

并完成...

注意:所有3个表必须有相同的结构,这个答案

0

如果你需要比较行,你有没有一个唯一的列(你要比较所有列),你可以使用EXCEPT条款如下:

INSERT INTO table3 
SELECT * 
FROM tabel1 
EXCEPT 
SELECT * 
FROM table2 
0

我觉得UNION将有两个表之间使用的最佳选择。 像:

SELECT t1.* FROM table1 t1 UNION SELECT t2.* FROM table2 t2