Heim >Datenbank >MySQL-Tutorial >Wie kann man Tabellen mit LIMIT 1 in einer verbundenen Tabelle effizient verbinden?
Problem:
Zwei Tabellen verbinden und dabei nur eine abrufen Datensatz aus der verbundenen Tabelle für jeden Datensatz in der Primärtabelle, insbesondere in Kontexten, in denen mehrere Datensätze in der verbundenen Tabelle vorhanden sind Tabelle.
LÖSUNG MIT EINER UNTERABFRAGE:
Dieser Ansatz umgeht effektiv den Fehler, der auftritt, wenn mehrere Spalten aus der verknüpften Tabelle ausgewählt werden, während die Ergebnisse auf einen einzelnen Datensatz beschränkt werden. Der Schlüssel besteht darin, eine Unterabfrage zu verwenden, um den Primärschlüssel des gewünschten Datensatzes abzurufen. Die Unterabfrage wird dann verwendet, um die verbundene Tabelle in der primären Abfrage zu filtern.
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 = ( --- the PRIMARY KEY SELECT p1.id FROM products AS p1 WHERE c.id=p1.category_id ORDER BY p1.id LIMIT 1 )
Diese Abfrage zeigt eine überlegene Leistung, selbst wenn die verbundene Tabelle eine deutlich größere Anzahl von Datensätzen enthält als die primäre Tabelle.
Alternative Ansätze:
Während der Unterabfrageansatz im Allgemeinen optimal ist, stehen alternative Methoden zur Verfügung. Es ist jedoch wichtig, ihre möglichen Auswirkungen auf die Leistung zu berücksichtigen.
SELECT id, category_title, (array_agg(product_title))[1] FROM (SELECT c.id, c.title AS category_title, p.id AS product_id, p.title AS product_title FROM categories AS c JOIN products AS p ON c.id = p.category_id ORDER BY c.id ASC) AS a GROUP BY id, category_title;
SELECT c.id, c.title, p.id AS product_id, p.title AS product_title FROM categories AS c CROSS JOIN (SELECT product_id, title, ROW_NUMBER() OVER (PARTITION BY category_id ORDER BY id) AS rn FROM products) AS p WHERE rn = 1;
Das obige ist der detaillierte Inhalt vonWie kann man Tabellen mit LIMIT 1 in einer verbundenen Tabelle effizient verbinden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!