[英]Insert rows not contained in one table to another
我有两个几乎相同的表,但相差约100行(在150k中)。 我知道如何通过使用找到一个表中存在的所有行,而不找到另一个表中的所有行
SELECT [Column]
FROM [DB].[dbo].[Table_1]
WHERE NOT EXISTS
(SELECT *
FROM [DB].[dbo].[Table_1a]
WHERE [EDB].[dbo].[Table_1a].[Column] = [DB].[dbo].[Table_1].[Column])
但是我希望能够将Table_1
缺少的行插入到Table_1a
,但是以上代码在插入语句中不起作用:
INSERT [DB].[dbo].[Table_1]
SELECT *
FROM [DB].[dbo].[Table_1a]
WHERE NOT EXISTS
(SELECT *
FROM [DB].[dbo].[Table_1a]
WHERE [DB].[dbo].[Table_1a].[Column] = [DB].[dbo].[Table_1].[Column])
当我得到错误时:无法绑定多部分标识符“ DB.dbo.Table_1.Column”。
我已经从无法绑定多部分标识符的位置调查了该错误,并且http://www.sql-server-helper.com/error-messages/msg-4104.aspx,但是这些都不能解决我的问题不使用JOIN
或别名。 因此,我不确定该怎么做。
我正在使用SQL Server 2017。
你可以得到所有从行[DB].[dbo].[Table_1a]
不存在中[DB].[dbo].[Table_1a]
,使用左连接:
INSERT [DB].[dbo].[Table_1]
SELECT t1a.*
FROM [DB].[dbo].[Table_1a] t1a
LEFT JOIN [DB].[dbo].[Table_1] t1
ON t1a.[Column] = t1.[Column]
WHERE t1.[Column] IS NULL
问题是您有两个[DB].[dbo].[Table_1a]
FROM子句引用,而您没有为它们加别名。
因此,在子查询的WHERE子句中(该子查询可以访问内部查询和外部查询,因此可以同时访问[DB].[dbo].[Table_1a]
的[DB].[dbo].[Table_1a]
),优化器不知道您在此表示的是哪个:
WHERE [DB].[dbo].[Table_1a].[Column] = ...
如果为这些表引用提供两个不同的别名,并在WHERE子句中选择一个,则应该没问题:
INSERT [DB].[dbo].[Table_1]
SELECT *
FROM [DB].[dbo].[Table_1a] t1
WHERE NOT EXISTS
(SELECT *
FROM [DB].[dbo].[Table_1a] t2
WHERE t2.[Column] = [DB].[dbo].[Table_1].[Column])
编辑:
另一个问题是,要插入的Table_1
在记录Table_1a
那里不存在的记录Table_1a
匹配的记录Table_1
。
这没有多大意义。 可能的意思是插入1
不存在的1a
记录。 因此,可能是您的意思是,它可以正常工作:
INSERT INTO Table_1
SELECT * FROM Table_1a t2
WHERE NOT EXISTS(
SELECT * FROM Table_1 t1
WHERE t1.Col1=t2.Col1
)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.