我目前有一张包含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))
以下各种答案都有丰富的内容,可以根据不同情况进行调整。请看一下这些,因为他们可能会解决您可能有这样一个稍微变化的问题。 :)
答案 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)
一步一步:
首先,我们应该选择table1
中table2
中不存在的记录(根据您的问题)
如果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