Heim > Datenbank > MySQL-Tutorial > Wie rufe ich mithilfe von SQL-Joins Datensätze ab, die alle Werte einer bestimmten Menge (aber möglicherweise noch mehr) enthalten?

Wie rufe ich mithilfe von SQL-Joins Datensätze ab, die alle Werte einer bestimmten Menge (aber möglicherweise noch mehr) enthalten?

Linda Hamilton
Freigeben: 2024-12-17 14:35:12
Original
841 Leute haben es durchsucht

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

SQL, bei dem die verknüpfte Menge alle Werte enthalten muss, aber möglicherweise mehr enthält.

Bei einem Satz von Tabellen mit Beziehungen besteht das Ziel darin, Datensätze abzurufen aus einer Tabelle (Angeboten), die ein bestimmtes Array von Werten enthalten, aber auch zusätzliche Werte haben können.

In SQL kann dies durch eine Kombination von Joins erreicht werden, Gruppierung und die HAVING-Klausel. Die folgende Abfrage erledigt diese Aufgabe:

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;
Nach dem Login kopieren

Überlegungen:

  • Der Primärschlüssel der Angebotstabelle (o.id) wird für die Gruppierung nach verwendet Stellen Sie sicher, dass jedes Angebot einmal gezählt wird.
  • GROUP BY kann zum Aggregieren von Datensätzen verwendet werden, ohne DISTINCT bei der Zählung zu verwenden Operation.
  • Die HAVING-Klausel filtert die gruppierten Ergebnisse, um nur Angebote einzuschließen, die die gewünschten Kriterien erfüllen (in diesem Fall zwei bestimmte Sportarten).

ActiveRecord-Implementierung:

def self.includes_sports(*sport_names)
  joins(:sports)
    .where(sports: { name: sport_names })
    .group('offers.id')
    .having("count(*) = ?", sport_names.size)
end
Nach dem Login kopieren

Mit dieser Methode können Sie nach Angeboten abfragen, die die angegebenen Sportnamen enthalten ActiveRecord:

offers = Offer.includes_sports("Bodyboarding", "Surfing")
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonWie rufe ich mithilfe von SQL-Joins Datensätze ab, die alle Werte einer bestimmten Menge (aber möglicherweise noch mehr) enthalten?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage