datatypes - t-sql شرح




T-SQL: حذف جميع الصفوف المكررة مع الاحتفاظ بنسخة مكررة (2)

لم تقل ما الإصدار الذي كنت تستخدمه ، ولكن في SQL 2005 والإصدارات الأحدث ، يمكنك استخدام تعبير جدول شائع مع جملة OVER . يذهب شيء صغير مثل هذا:

WITH cte AS (
  SELECT[foo], [bar], 
     row_number() OVER(PARTITION BY foo, bar ORDER BY baz) AS [rn]
  FROM TABLE
)
DELETE cte WHERE [rn] > 1

تلعب معها ونرى ما تحصل عليه.

(تحرير: في محاولة لتكون مفيدة ، قام شخص ما بتحرير عبارة ORDER BY داخل CTE. لتوضيح ذلك ، يمكنك طلب أي شيء تريده هنا ، لا يلزم أن يكون أحد الأعمدة التي تم إرجاعها بواسطة cte. حالة الاستخدام الشائعة هنا هي أن "foo، bar" هي معرف المجموعة و "baz" هو نوع من الطابع الزمني.

ممكن تكرار:
SQL - كيف يمكنني إزالة الصفوف المكررة؟

لدي جدول يحتوي على عدد كبير جدًا من الصفوف. لا يسمح بالنسخ ، ولكن بسبب وجود مشكلة في كيفية إنشاء الصفوف ، أعرف أن هناك بعض التكرارات في هذا الجدول. أحتاج إلى إزالة الصفوف الإضافية من منظور الأعمدة الرئيسية. قد تحتوي بعض الأعمدة الأخرى على بيانات مختلفة قليلاً لكني لا أهتم بذلك. ما زلت بحاجة للحفاظ على واحد من هذه الصفوف. لن تعمل ميزة SELECT DISTINCT لأنها تعمل على جميع الأعمدة وأحتاج إلى منع التكرارات المستندة إلى أعمدة المفاتيح.

كيف يمكنني حذف الصفوف الإضافية ولكن لا أزال أحفظها بكفاءة؟


مثال على استفسار:

DELETE FROM Table
WHERE ID NOT IN
(
SELECT MIN(ID)
FROM Table
GROUP BY Field1, Field2, Field3, ...
)

هنا fields هي العمود الذي تريد تجميع الصفوف المكررة.





tsql