IN

2012-03-12 19 views
7

ile birden çok ifade Ben aynı yapıya sahip iki tane büyük (4+ milyon kayıt) tablo var ve bunlar yaklaşık 300k çoğaltılmış satırları var. DELETE IN sözdizimini kullanarak DELETE yinelenen satırları yapmak istiyorum.
IN

Zaten MERGE ifadesini kullanarak yaptık (sadece 2008 veya daha yeni bulunan, bu yüzden hala 2005 koşuyorum beri bunu kullanamazsınız) ve DELETE EXISTS, ama bazı içine çalıştırıyorum çalışmak için DELETE IN almakta sorun.

DELETE IN ile karşılaştığım sorun, büyük tablonun birleşik bir birincil anahtara sahip olmasıdır; bu, yalnızca tüm sütunları birlikte kullanarak benzersiz satırları tanımlayabildiğim anlamına gelir.

T-SQL'de IN maddesine parametreler olarak birden fazla ifadeye sahip olmak mümkün mü? Bir şey gibi:

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

Bu geçerli standart SQL sözdizimi (! Eğer çift tırnak olanlar köşeli parantez yerini ise) ancak henüz SQL desteklenmez edilir Sunucu, dahil olmak üzere [burada] (http://connect.microsoft.com/SQLServer/feedback/details/299231/add-support-for-ansi-standard-row-value-constructors) oy verebilirsiniz. – onedaywhen

+0

Bu sözdizimini SQL Server'ın gelecekteki bir sürümünde desteklemeyi istiyorsanız, lütfen oylama ve yorum yapın: http://connect.microsoft.com/SQLServer/feedback/details/299231/add-support-for-ansi-standard-row- değer kurucular –

cevap

14

sadece bunun için bir JOIN yapabilirsiniz:

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