এটি করার আরেকটি সম্ভাব্য উপায়
;
--Ensure that any immediately preceding statement is terminated with a semicolon above
WITH cte
AS (SELECT ROW_NUMBER() OVER (PARTITION BY Col1, Col2, Col3
ORDER BY ( SELECT 0)) RN
FROM #MyTable)
DELETE FROM cte
WHERE RN > 1;
আমি ব্যাবহার করছি ORDER BY (SELECT 0)
টাইটির ক্ষেত্রে কোন সারিটি সংরক্ষণ করা হবে তা নির্বিচারে হিসাবে উপরে ।
RowID
উদাহরণস্বরূপ আপনি ব্যবহার করতে পারেন যাতে সর্বশেষতম সংরক্ষণ করতেORDER BY RowID DESC
কার্যকর করার পরিকল্পনা
এর জন্য কার্যকর করার পরিকল্পনাটি স্বীকৃত উত্তরের চেয়ে প্রায়শই সহজ এবং আরও কার্যকর কারণ এটি স্ব-যোগদানের প্রয়োজন হয় না।
তবে, সবসময় না. GROUP BY
সমাধানটিকে অগ্রাধিকার দেওয়া হতে পারে এমন এক জায়গাটি হ'ল স্ট্রিম সামগ্রীর পক্ষে অগ্রাধিকার হিসাবে হ্যাশ সমষ্টি নির্বাচন করা হবে।
ROW_NUMBER
সমাধান সবসময় কাছাকাছি একই পরিকল্পনা দেব যেহেতু GROUP BY
কৌশল নমনীয় হয়।
হ্যাশ সামগ্রিক পদ্ধতির পক্ষে হতে পারে এমন কারণগুলি হবে
- পার্টিশনের কলামগুলিতে কোনও দরকারী সূচক নেই
- প্রতিটি গ্রুপে তুলনামূলকভাবে আরও বেশি সদৃশ সহ অপেক্ষাকৃত কম গ্রুপ
এই দ্বিতীয় মামলার চূড়ান্ত সংস্করণগুলিতে (যদি প্রত্যেকটিতে অনেকগুলি TRUNCATE
নকলের সাথে খুব কয়েকটি গোষ্ঠী থাকে) একটি নতুন সারণীতে সারি সন্নিবেশ করানো বিবেচনা করতে পারে তারপরে মূল-টিপুন এবং সেগুলি মুছার তুলনায় লগিংকে হ্রাস করতে পুনরায় অনুলিপি করতে পারে সারিগুলির খুব বেশি অনুপাত।
DELETE FROM
সরাসরি কোনও সিটিই পদ ব্যবহার করতে পারবেন না । স্ট্যাকওভারফ্লো.com