我有一組包含重複條目,因爲從數據源倍數起源行的重複數據刪除列表。我還有一個單獨的參考表,指出這些數據源的優先級。提示基於優先級列
沒有人有最有效的T-SQL刪除重複這個名單好的建議?
基本上我有:
SELECT a.*, b.priority
FROM tableA as a
JOIN tableB as b
ON b.sourceId = a.sourceId
我已被放置這個到一個臨時表,然後在我想可能是更有效的一種奇怪的方式刪除。
DELETE ta
FROM #tmp ta
JOIN #tmp tb
ON ta.duplicateId = tb.duplicateId
WHERE ta.priority < tb.priority
表A對於兩個來源具有相同的列,但數據可能不同 - 因此它們可能有不同的價格。我面臨的挑戰是我必須從源頭獲得最高優先級的行(和其他所有信息)。使問題複雜化,我沒有來自所有來源的每個項目的數據。
所以,第1項可以具有從源A和B的數據,而第2項可以僅從源B和C具有它因此,刪除需要每個唯一的項目的基礎上發生。
1)當你說你有重複的條目,在表A相同的所有列兩行是重複的?如果他們不是,並且tableA.SourceId不同,並且您在tableB中只有一個匹配的源代碼ID,並且您想要刪除重複項,那麼只需在tableA上運行刪除而不是臨時表。 – 2009-07-31 03:15:30