একটি_এর সাথে মিলিত has_many টেবিলের সাথে অভ্যন্তরীণ যোগদান সম্পাদন করা group
বা uniq
সম্ভাব্যভাবে খুব অদক্ষ, এবং এসকিউএল এ এটি একটি আধা-যোগ হিসাবে আরও ভালভাবে প্রয়োগ করা হবে যা EXISTS
সম্পর্কিত সম্পর্কযুক্ত সাবকোয়ারির সাথে ব্যবহার করে ।
এটি কোয়েরি অপটিমাইজারকে শূন্যপদগুলির সারণীটি সঠিক প্রোজেক্ট_আইড দিয়ে সারিটির অস্তিত্বের জন্য তদন্ত করতে সহায়তা করে। এক সারি বা মিলিয়ন যে প্রকল্প_আইড আছে তা বিবেচনা করে না।
এটি কারাগারে সহজ সরল নয়, তবে এটি দ্বারা অর্জন করা যেতে পারে:
Project.where(Vacancies.where("vacancies.project_id = projects.id").exists)
একইভাবে, এমন সমস্ত প্রকল্পগুলি সন্ধান করুন যার কোনও শূন্যপদ নেই:
Project.where.not(Vacancies.where("vacancies.project_id = projects.id").exists)
সম্পাদনা করুন: সাম্প্রতিক কালের সংস্করণগুলিতে আপনি একটি অবচয় হুঁশিয়ারি পেয়ে যাচ্ছেন যে আপনাকে exists
আরএল- তে নিযুক্ত হওয়ার উপর নির্ভর করবেন না telling এটি দিয়ে এটি ঠিক করুন:
Project.where.not(Vacancies.where("vacancies.project_id = projects.id").arel.exists)
সম্পাদনা করুন: আপনি যদি কাঁচা এসকিউএল নিয়ে অস্বস্তি হন তবে চেষ্টা করুন:
Project.where.not(Vacancies.where(Vacancy.arel_table[:project_id].eq(Project.arel_table[:id])).arel.exists)
ব্যবহারকে আড়াল করার জন্য শ্রেণি পদ্ধতিগুলি যোগ করে আপনি এই কম অগোছালো করতে পারেন arel_table
, উদাহরণস্বরূপ:
class Project
def self.id_column
arel_table[:id]
end
end
... তাই ...
Project.where.not(
Vacancies.where(
Vacancy.project_id_column.eq(Project.id_column)
).arel.exists
)