我有一個奇怪的情況。我試圖遞歸地向SQL表中添加記錄。在將記錄添加到SQL表時檢測重複項
表結構(簡體):
TableA
Key1 Key2 Description
假設我已經有一些記錄更新表A:
Key1 Key2 Description
12345 98765 Name1
23456 87654 Name2
34567 76543 Name3
45678 65432 Name4
我需要抓住的密鑰2的所有記錄現在和另一個表看看他們( TableB),但是如果Key1和Key2的組合已經存在,我不需要更新TableA。 因此,舉例來說,如果我在表B找到一個記錄鍵2 = 87654和鍵1 = 15965,我應該作如下更新表A:
Key1 Key2 Description
87654 15965 Name59
但如果我發現TableB中的記錄與鍵2 = 87654和鍵1 = 23456,我不應在表A創建記錄所有:
Key1 Key2 Description
87654 23456 Name59
上述記錄應當不創建。
這裏是我的查詢:
insert into TableA
(key1, key2, Description)
select Key1, Key2, Description from TableB
join TableB TableB.Key1 = TableA.key2
and TableB.Key2 <> TableA.Key1
and not exists(select 1 from TableA where TableA.Key2= TableB.Key1and TableA.Key1 = TableB.Key2)
這實際上插入重複所以在最後,這是我所得到的:
Key1 Key2 Description
12345 98765 Name1
23456 87654 Name2
34567 76543 Name3
45678 65432 Name4
76543 74185 Name5
87654 82563 Name6
87654 23456 Name7
76543 34567 Name8
65432 45678 Name9
我試圖避免將最後的3條記錄。 任何人有一個想法我做錯了什麼?
編輯:只是爲了澄清...這是我的數據集:
Key1 Key2
E7483934-9AF7-E111-9912-78E7D16510D0 8FDE361D-B5C6-E011-A943-78E7D1644F78
E7483934-9AF7-E111-9912-78E7D16510D0 5001D99D-966B-E111-8FD2-78E7D16510D0
E7483934-9AF7-E111-9912-78E7D16510D0 76E8758E-A366-E111-B7C5-78E7D16510D0
E7483934-9AF7-E111-9912-78E7D16510D0 FB6F054F-E2BE-E511-9410-005056B5201F
E7483934-9AF7-E111-9912-78E7D16510D0 4A2007DA-E2BE-E511-9410-005056B5201F
E7483934-9AF7-E111-9912-78E7D16510D0 AE90299F-FAF5-E211-8706-D8D385B829F8
E7483934-9AF7-E111-9912-78E7D16510D0 76E9758E-A366-E111-B7C5-78E7D16510D0
E7483934-9AF7-E111-9912-78E7D16510D0 EB483934-9AF7-E111-9912-78E7D16510D0
8FDE361D-B5C6-E011-A943-78E7D1644F78 AE90299F-FAF5-E211-8706-D8D385B829F8
8FDE361D-B5C6-E011-A943-78E7D1644F78 EB483934-9AF7-E111-9912-78E7D16510D0
8FDE361D-B5C6-E011-A943-78E7D1644F78 76E9758E-A366-E111-B7C5-78E7D16510D0
AE90299F-FAF5-E211-8706-D8D385B829F8 8FDE361D-B5C6-E011-A943-78E7D1644F78
76E9758E-A366-E111-B7C5-78E7D16510D0 8FDE361D-B5C6-E011-A943-78E7D1644F78
EB483934-9AF7-E111-9912-78E7D16510D0 8FDE361D-B5C6-E011-A943-78E7D1644F78
所以頂部是表B(我的源表)。 我需要通過特定的Key1值查找此表(例如WHERE TableB.key1 ='E7483934-9AF7-E111-9912-78E7D16510D0'),將具有該值的記錄拉入另一個表(TableA),然後再次查找TableB但通過TableB.key1 = TableA.key2,如果存在記錄,則將它們添加到TableA表中。需要注意的是我不希望TableA具有key1 + key2的相同組合。所以如果你看看上面的例子,我只希望前面的11條記錄被拉入TableA中,但是它還會抽取最後3個我不需要的記錄,因爲這些組合已經存在於TableA中。
TIA,
-Tony.
我想也許你在你的問題中混合了'key1'和'key2'。在你的問題的某些部分,'key1'和'key2'的值交換。這是打算? –
因此,打算首先將TableB中具有特定key1值的所有記錄拖入臨時表(例如)TableA,然後讀取key2值上的TableA,再次在TableB中查找它們,但是通過TableB.key1 = TableA.key2和如果找到,則向TableA添加更多記錄,但我需要排除TableA上存在TableA的記錄.key1 = TableB.key2和TableA.key2 = TableA.key1。 – Tony