Rumah > pangkalan data > tutorial mysql > Bagaimana untuk Mendapatkan Rekod yang Mengandungi Semua Set Nilai yang Diberikan (Tetapi Berkemungkinan Lebih Banyak) Menggunakan SQL Joins?

Bagaimana untuk Mendapatkan Rekod yang Mengandungi Semua Set Nilai yang Diberikan (Tetapi Berkemungkinan Lebih Banyak) Menggunakan SQL Joins?

Linda Hamilton
Lepaskan: 2024-12-17 14:35:12
asal
844 orang telah melayarinya

How to Retrieve Records Containing All of a Given Set of Values (But Potentially More) Using SQL Joins?

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;
Salin selepas log masuk

Pertimbangan:

  • Kunci utama jadual tawaran (o.id) digunakan untuk mengumpulkan kepada pastikan setiap tawaran dikira sekali.
  • GROUP BY boleh digunakan untuk mengagregatkan rekod tanpa menggunakan DISTINCT dalam kiraan operasi.
  • Klausa HAVING menapis hasil terkumpul untuk hanya memasukkan tawaran yang memenuhi kriteria yang diingini (dalam kes ini, mempunyai dua sukan khusus).

Pelaksanaan ActiveRecord:

def self.includes_sports(*sport_names)
  joins(:sports)
    .where(sports: { name: sport_names })
    .group('offers.id')
    .having("count(*) = ?", sport_names.size)
end
Salin selepas log masuk

Dengan kaedah ini, anda boleh membuat pertanyaan untuk tawaran yang menyertakan nama sukan yang dinyatakan dalam ActiveRecord:

offers = Offer.includes_sports("Bodyboarding", "Surfing")
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan