Heim >Datenbank >MySQL-Tutorial >Wie rufe ich mit JOIN mit LIMIT 1 ein Produkt pro Kategorie ab?

Wie rufe ich mit JOIN mit LIMIT 1 ein Produkt pro Kategorie ab?

Susan Sarandon
Susan SarandonOriginal
2024-12-01 06:38:13301Durchsuche

How to Retrieve One Product per Category Using JOIN with LIMIT 1?

Verknüpfen von Tabellen mit LIMIT 1 in der verbundenen Tabelle

Die Aufgabe besteht darin, zwei Tabellen zu verbinden, aber jeweils nur einen Datensatz aus der verbundenen Tabelle abzurufen Eintrag in der ersten Tabelle. Betrachten Sie die folgenden Tabellen:

categories (id, title)
products (id, category_id, title)

Eine einfache Abfrage würde diese Tabellen wie folgt verbinden:

SELECT c.id, c.title, p.id AS product_id, p.title
FROM categories AS c
JOIN products AS p ON c.id = p.category_id

Dies gibt jedoch mehrere Zeilen für jede Kategorie zurück, was unerwünscht ist. Wir müssen die Ergebnisse auf einen Datensatz aus der Produkttabelle pro Kategorie beschränken.

Ein bei einer ähnlichen Frage empfohlener Ansatz besteht darin, eine Unterabfrage zu verwenden, um den Primärschlüssel des gewünschten Datensatzes abzurufen:

SELECT
 c.id,
 c.title,
 p.id AS product_id,
 p.title AS product_title
FROM categories AS c
JOIN products AS p ON
 p.id = (
  SELECT p1.id FROM products AS p1
  WHERE c.id=p1.category_id
  ORDER BY p1.id LIMIT 1
 )

Diese Abfrage ruft die gewünschten Ergebnisse effizient ab, ohne dass verschachtelte Abfrageprobleme auftreten. Darüber hinaus übertrifft es andere vorgeschlagene Lösungen hinsichtlich der Ausführungszeit, insbesondere bei der Verarbeitung großer Datenmengen.

Das obige ist der detaillierte Inhalt vonWie rufe ich mit JOIN mit LIMIT 1 ein Produkt pro Kategorie ab?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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