Heim > Datenbank > MySQL-Tutorial > Hauptteil

Wie kann man Tabellen mit LIMIT 1 in einer verbundenen Tabelle effizient verbinden?

Linda Hamilton
Freigeben: 2024-11-15 21:05:02
Original
605 Leute haben es durchsucht

How to Efficiently Join Tables with LIMIT 1 on a Joined Table?

Effizientes Verbinden von Tabellen mit LIMIT 1 auf einer verbundenen Tabelle

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

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.

  • Verwendung von GROUP BY und Array-Aggregation (LIMIT NICHT anwendbar):
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;
Nach dem Login kopieren
  • Verwenden von CROSS JOIN und ROW_NUMBER (LIMIT NICHT Anwendbar):
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;
Nach dem Login kopieren

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!

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