আপনি ক্ষেত্রগুলিতে একই টেবিলটিতে যোগ দিতে পারেন যা নকল হবে এবং তারপরে আইডি ক্ষেত্রে অ্যান্টি-জয়েন করুন। প্রথম টেবিল ওরফে (tn1) থেকে আইডি ক্ষেত্রটি নির্বাচন করুন এবং তারপরে দ্বিতীয় টেবিলের ওরফে আইডি ফিল্ডে অ্যারে_অ্যাগ ফাংশনটি ব্যবহার করুন। অবশেষে, অ্যারে_এগজি ফাংশনটি সঠিকভাবে কাজ করার জন্য, আপনি ফলাফলগুলি tn1.id ক্ষেত্রের দ্বারা ভাগ করবেন। এটি এমন একটি ফলাফল সেট তৈরি করবে যাতে একটি রেকর্ডের আইডি এবং যোগদানের শর্তাবলী মাপসই সমস্ত আইডির একটি অ্যারে থাকে।
select tn1.id,
array_agg(tn2.id) as duplicate_entries,
from table_name tn1 join table_name tn2 on
tn1.year = tn2.year
and tn1.sid = tn2.sid
and tn1.user_id = tn2.user_id
and tn1.cid = tn2.cid
and tn1.id <> tn2.id
group by tn1.id;
স্পষ্টতই, আইডির যেটি একটি আইডির জন্য সদৃশ_আন্ট্রিগুলিতে থাকবে, ফলাফল সেটে তাদের নিজস্ব প্রবেশিকাও থাকবে। আপনি কোন আইডি 'সত্যের' উত্স হতে চান তা নির্ধারণ করতে আপনাকে এই ফলাফল সেটটি ব্যবহার করতে হবে। একটি রেকর্ড যা মুছে ফেলা উচিত নয়। আপনি এই জাতীয় কিছু করতে পারেন:
with dupe_set as (
select tn1.id,
array_agg(tn2.id) as duplicate_entries,
from table_name tn1 join table_name tn2 on
tn1.year = tn2.year
and tn1.sid = tn2.sid
and tn1.user_id = tn2.user_id
and tn1.cid = tn2.cid
and tn1.id <> tn2.id
group by tn1.id
order by tn1.id asc)
select ds.id from dupe_set ds where not exists
(select de from unnest(ds.duplicate_entries) as de where de < ds.id)
সর্বাধিক সংখ্যক আইডির নকল রয়েছে তা বেছে নিন (আইডি ধরে নিচ্ছেন যে ইনপিকে পিকে বাড়ছে)। আপনার আইডিটি আপনার আশেপাশে রাখবে।