簡體   English   中英

將一個表中未包含的行插入到另一個表中

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM