[英]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.