我有2個表A和B具有相同的結構。我需要從表A中得到表B中不存在的每一行,然後將它們插入到第3個#temp表C中。SQL比較2 #temp表並將差異插入到第3個#temp表中
每個表有2列需要進行比較,類型和步驟,其餘列是不需要比較的RowID,CreatedDate,CreatedUserID,ModifiedDate和ModifiedUserID。
有一個單獨的語句,我可以使用INSERT INTO #tempC是比較A和B,並會使用TSQL(SQL SERVER 2012)
我有2個表A和B具有相同的結構。我需要從表A中得到表B中不存在的每一行,然後將它們插入到第3個#temp表C中。SQL比較2 #temp表並將差異插入到第3個#temp表中
每個表有2列需要進行比較,類型和步驟,其餘列是不需要比較的RowID,CreatedDate,CreatedUserID,ModifiedDate和ModifiedUserID。
有一個單獨的語句,我可以使用INSERT INTO #tempC是比較A和B,並會使用TSQL(SQL SERVER 2012)
插入來自不存在於表B的值SQL 2012有EXCEPT語句。這是一個簡單的例子。
CREATE TABLE #TmpA (
Col Varchar(10),
Irrelevant Int);
CREATE TABLE #TmpB (
Col Varchar(10));
CREATE TABLE #TmpC (
Col Varchar(10));
INSERT INTO #TmpA
SELECT 'A', 0 UNION ALL
SELECT 'B', 7 UNION ALL
SELECT 'C', 5 ;
INSERT INTO #TmpB
SELECT 'A' UNION ALL
SELECT 'C' UNION ALL
SELECT 'D';
INSERT INTO #TmpC
SELECT Col FROM #TmpA
EXCEPT
SELECT Col FROM #TmpB
SELECT * FROM #TmpC;
DROP TABLE #TmpA, #TmpB, #TmpC;
以下Blams批判
---而第二個方案
CREATE TABLE #TmpA (
Col Varchar(10),
Irrelevant Int);
CREATE TABLE #TmpB (
Col Varchar(10));
CREATE TABLE #TmpC (
Col Varchar(10),
Irrelevant Int);
INSERT INTO #TmpA
SELECT 'A', 0 UNION ALL
SELECT 'B', 7 UNION ALL
SELECT 'C', 5 ;
INSERT INTO #TmpB
SELECT 'A' UNION ALL
SELECT 'C' UNION ALL
SELECT 'D';
;WITH Exceptions AS (
SELECT Col FROM #TmpA
EXCEPT
SELECT Col FROM #TmpB
)
INSERT INTO #TmpC
SELECT A.Col, A.Irrelevant
FROM #TmpA A
JOIN Exceptions E ON A.Col = E.Col
SELECT * FROM #TmpC;
DROP TABLE #TmpA, #TmpB, #TmpC;
insert into #temp3 (Type, Step, RowID ..)
select #temp1.Type, #temp1.Step, #temp1.RowID
from #temp1
left outer join #temp2
on #temp1.Type = #temp2.Type
and #temp1.Step = #temp2.Step
where #temp2.Type is null
感謝阿龍貝特朗,這是最簡單的方法,這是我的發言:
INSERT INTO #C SELECT WFTypeID, WFStepID FROM #A EXCEPT SELECT WFTypeID, WFStepID FROM #B
感謝其他反應的傢伙,但這是太多的代碼,當你可以在1行:)
所以不清楚,你不希望其他列。但如果你不想要其他欄目,那麼這就是湯姆布朗發佈的確切答案。 – Paparazzi
@Blam - 不清楚? 「每個表有兩列需要比較,類型和步驟,其餘列是RowID,CreatedDate,CreatedUserID,ModifiedDate和ModifiedUserID,不需要比較。」湯姆布朗的回答很好,但我確實提到「是否有一個我可以用來INSERT INTO的陳述」,而且Aaron的評論確實如此,簡單而易於閱讀和理解。 –
不清楚您不希望插入其他列。查看Tom Brown的答案INSERT INTO #TmpC SELECT Col FROM #TmpA EXCEPT SELECT Col FROM #TmpB。你的回答有什麼不同? – Paparazzi
你當然應該能夠做到這一點' NOT IN'或'NOT EXISTS' – Andrew
感謝@AaronBertrand,這很好,我只是將最後一個FROM改爲#B而不是#C –