我asked this question a while back刪除基於列的重複記錄。答案很好:我可以刪除基於多列的數據庫副本嗎?
delete from tbl
where id NOT in
(
select min(id)
from tbl
group by sourceid
)
我現在有一個類似的情況,但重複記錄的定義是基於多列。如何修改上面的SQL以確定重複的記錄,其中唯一記錄被定義爲從Col1 + Col2 + Col3連接起來。我會做這樣的事嗎?
delete from tbl
where id NOT in
(
select min(id)
from tbl
group by col1, col2, col3
)
原理仍然存在 - 分組是由一個還是多個列組成並不重要。您將只保留組中的第一行。但是 - 如果您不介意我說 - 在發出刪除之前一定要檢查您的數據。轉換刪除選擇,看看什麼將不會生存。 – 2012-07-23 14:41:52
@Nikola Markovinovic - 它看起來像做正確的事情,但只是想確認 – leora 2012-07-23 15:00:11
@leora我發現你使用的語法繁瑣的概念化/逆向工程。它不能很好地轉化爲id可能爲空的情況(因爲在不涉及空值的情況下,'not in'的行爲不如您預期的那樣)。我意識到這不太可能是一個因素,但重要的是要了解有關CTE和不存在的情況下,它可能... – 2012-07-23 15:20:29