使用SQL Server 2008.我試圖刪除表中的一些重複行。這裏列出的表格,以及其他相關的列:從兩個表刪除不在鏈接表中的重複行
什麼需要
ItemTable
----------
Id - autoincrement, PK
ItemLabel - the actual identifier of the items
Linktable
----------
Id - autoincrement, PK
ItemId - the Id from ItemTable
RelatedItemId - the Id from RelatedItemTable
RelatedItemTable
------
no need to touch this with the query..
所以鏈接表不包含在項目的實際ID,但正在運行的行號要實現:ItemTable包含具有重複ItemLabel的行,其中另一個在鏈接表中列出(使用Id列的值),另一個不是。從ItemTable中,不鏈接的鏈接必須被刪除。我知道如何使用count和group by來選擇重複行,但一直未能弄清楚如何只刪除鏈接表中不存在的行。 ItemTable還包含沒有關係的項目的重複項目,其中一個項目必須保留(無關緊要)。
http://www.sqlfiddle.com/#!3/9d181這是一個SQL小提琴與虛擬數據。
P.S.不要問爲什麼鏈接表使用正在運行的ID而不是實際的ID(可能是PK'd)......這是一個遺留系統。
前兩個將刪除所有重複行AFAIK,這裏的問題是鏈接表中的副本必須保持不變。當我將DELETE更改爲SELECT *時,第三個查詢沒有任何返回。 – 2013-03-11 09:16:16
@TeemuTerho最好的辦法是發佈一些示例數據以及預期的輸出。如果你這樣做,我敢肯定很多人在這裏可以給你答案:) – 2013-03-11 09:41:43
@TeemuTerho我更新了我的答案,我相信它做到了什麼,看到SQL小提琴... – 2013-03-11 09:53:50