2012-03-12 60 views
7

我有兩個有點大(4 +百萬條記錄)具有相同結構的表,並且它們有大約300k個重複行。我想DELETE使用DELETE IN語法的重複行。
多個表達式與IN

我已經使用MERGE語句(僅在2008或更新版本上提供,因此我無法使用它,因爲我仍在運行2005)和DELETE EXISTS,但我遇到了一些遇到DELETE IN無法正常工作。

DELETE IN我遇到的問題是我的大表有一個複合主鍵,這意味着我只能識別使用所有這些列的唯一行。

在T-SQL中可能有多個表達式作爲IN子句的參數嗎?喜歡的東西:

DELETE FROM MyBigTable 
WHERE ([Column1], [Column2], [Column3]) IN 
    (SELECT [Column1], 
      [Column2], 
      [Column3] 
    FROM MyBigTable 
    INTERSECT 
    SELECT [Column1], 
      [Column2], 
      [Column3] 
    FROM MyOtherBigTable) 
+5

這是有效的標準SQL語法(!如果換成那些方括號雙引號),但目前還不支持在SQL服務器,您可以投票[這裏](http://connect.microsoft.com/SQLServer/feedback/details/299231/add-support-for-ansi-standard-row-value-constructors)列入。 – onedaywhen 2012-03-12 14:44:26

+0

如果您希望未來版本的SQL Server支持此語法,請投票評論:http://connect.microsoft.com/SQLServer/feedback/details/299231/add-support-for-ansi-standard-row-價值構造 – 2012-03-12 22:55:12

回答

14

你可以做這一個JOIN

DELETE A 
FROM MyBigTable A 
INNER JOIN MyOtherBigTable B 
ON A.Column1 = B.Column1 AND A.Column2 = B.Column2 AND A.Column3 = B.Column3