2012-10-18 81 views
0

可能重複:
Delete script SQL Server 2008在SQL Server 2008的重複

這裏是我試圖解決的情況。我有一個加載了重複的表格。它發生的原因是類似的行從兩個或更多不同的來源加載。這在包裝中正在被照顧。

但我想刪除那些重複的行。這裏沒有關鍵屬性。來源的例子是Cleveland CityOhio State。我有一列顯示從哪個源加載行(DataSource列)。

因此在行中顯示爲DataSource = 'Cleveland'DataSource = 'Ohio'

我想保留那些從俄亥俄州加載時導致重複的記錄。它的100k條記錄我可能不得不使用連接。還有一件事,我的主桌與其他四個或五個桌子連在一起,每個桌子都有獨特的rId,這就是爲什麼你看到我加入這張桌子,我不認爲我做得對。

你能檢查我的工作人員嗎?我真的欣賞它。

--Delete ct from--this is to delete w/c is my main intention 
SELECT * 
FROM 
    (
    (
     SELECT Rid,UID,ADDRESS,City,State,Zip,DataSource 
     FROM F_staRes where dataSource='Ohio' 
    ) O inner join 
    (
      SELECT Rid,UID,ADDRESS,City,State,Zip,DataSource 
      FROM F_staRes 
      where DataSource in ('Clev','Columbus') 
    ) ct 
      on O.UID=ct.UID and O.ADDRESS=ct.ADDRESS and O.City=ct.City and 
      O.State=ct.State and O.zip=ct.zip 

      join dbo.ResOrig ro 
      on ct.rId=ro.rId 

      join dbo.ResSta rs 
      on ct.rId=rs.rId 

      join dbo.ResDest rd 
      on ct.rId=rd.rId 

      where ct.DataSource in ('Clev','Columbus') 
+0

你的問題可能會更好地遷移到[代碼審查 - 堆棧交易所(http://codereview.stackexchange.com/faq )用於共享您正在爲同行評審工作的項目的代碼。 – Tony

回答

0

試試這個

請確保您有列比較重複,以便通過列u在你的情況我寫的說明在這裏保持遞增或遞減,首先嚐試通過註釋選擇行delete語句,它會顯示它不見了行的刪除,如果你只是罰款執行腳本

;WITH tbl_online AS (
SELECT *,ROW_NUMBER() OVER (
PARTITION BY UID,ADDRESS,City,State,Zip ORDER BY DataSource DESC) AS Rnum 
FROM F_staRes) 
--SELECT * FROM tbl_online WHERE Rnum >1 
DELETE FROM tbl_online WHERE Rnum >1 
+0

,感謝您查看我的問題。您的建議確實有效,但我的問題是我與其他表的聯接,因爲我有100k記錄我必須使用聯接。並且由於fk約束,它不允許我執行刪除操作。再次感謝..我希望這有點意義。 –

+0

ohoo你可以這樣做,獲取重複的uid到臨時表中並按順序刪除表示從小孩到父母 –