根据两个其他表的比较插入表中

时间:2014-09-02 08:24:07

标签: php mysql sql sql-server

我目前有一张包含1500万条旧记录( table1 )的表格,另一张包含1,100万条新记录( table2 )和一张空表(表3 )。

table1 table2 共享数据 - 我想在table1表中找到 table2 中不存在的记录,然后insert将这些内容放入 table3

到目前为止,我有以下内容(在table3.uniqueCode错误上返回一个未知列):

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

我应该注意table1和table2没有相同的结构,但两者都有uniqueCode字段,这不是KEY,而只是一个文字唯一的字符串代码。

非常感谢任何帮助,我已经研究过使用JOIN语句,但我也遇到了这种方法的错误。

谢谢!

更新 - 已回答

答案很简单:

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

以下各种答案都有丰富的内容,可以根据不同情况进行调整。请看一下这些,因为他们可能会解决您可能有这样一个稍微变化的问题。 :)

6 个答案:

答案 0 :(得分:0)

如果表格具有相同的结构:

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

答案 1 :(得分:0)

你能试试吗

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)

答案 2 :(得分:0)

在sql中使用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;

答案 3 :(得分:0)

一步一步:
首先,我们应该选择table1table2中不存在的记录(根据您的问题) 如果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个表必须具有相同的结构

答案 4 :(得分:0)

如果您需要比较行而您没有唯一的列(您希望比较所有列),可以使用EXCEPT子句,如下所示:

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

答案 5 :(得分:0)

我认为 UNION 将是两个表之间使用的最佳选择。 喜欢:

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