Heim >Datenbank >MySQL-Tutorial >Wie rufe ich mit JOIN mit LIMIT 1 ein Produkt pro Kategorie ab?
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!