SQL di mana set gabungan mesti mengandungi semua nilai tetapi mungkin mengandungi lebih banyak
Memandangkan set jadual dengan perhubungan, matlamatnya adalah untuk mendapatkan semula rekod daripada satu jadual (tawaran) yang termasuk tatasusunan nilai tertentu tetapi mungkin juga mempunyai nilai tambahan.
Dalam SQL, ini boleh dicapai menggunakan gabungan gabungan, pengelompokan dan klausa HAVING. Pertanyaan berikut menyelesaikan tugasan ini:
SELECT o.* FROM sports s JOIN offers_sports os ON os.sport_id = s.id JOIN offers o ON os.offer_id = o.id WHERE s.name IN ('Bodyboarding', 'Surfing') GROUP BY o.id -- !! HAVING count(*) = 2;
Pertimbangan:
Pelaksanaan ActiveRecord:
def self.includes_sports(*sport_names) joins(:sports) .where(sports: { name: sport_names }) .group('offers.id') .having("count(*) = ?", sport_names.size) end
Dengan kaedah ini, anda boleh membuat pertanyaan untuk tawaran yang menyertakan nama sukan yang dinyatakan dalam ActiveRecord:
offers = Offer.includes_sports("Bodyboarding", "Surfing")
Atas ialah kandungan terperinci Bagaimana untuk Mendapatkan Rekod yang Mengandungi Semua Set Nilai yang Diberikan (Tetapi Berkemungkinan Lebih Banyak) Menggunakan SQL Joins?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!