Auswahl aus zwei Tabellen mit ungleichen Zeilen in MySQL
In einer Online-Shopping-Datenbank mit zwei Tabellen – Kategorien und Produkte – ist eine häufige Aufgabe um alle Kategorien zusammen mit den minimalen und maximalen Produktpreisen in jeder Kategorie abzurufen. Bei einer einfachen Abfrage tritt jedoch ein Problem auf: Kategorien ohne Produkte werden aus den Ergebnissen ausgeschlossen.
Um dieser Herausforderung zu begegnen, ist es notwendig, einen Outer-Join anstelle eines impliziten Joins zu verwenden. Mit einem Outer-Join können Zeilen aus einer Tabelle (in diesem Fall Kategorien) abgerufen werden, auch wenn in der anderen Tabelle (Produkte) keine entsprechenden Zeilen vorhanden sind. Konkret wird hier ein Left-Join verwendet, sodass alle Kategorien in den Ergebnissen enthalten sind.
Zusätzlich wird die Funktion IFNULL() verwendet, um Nullwerte für Kategorien ohne Produkte durch 0 zu ersetzen. Diese Funktion nimmt den Wert des im ersten Argument bereitgestellten Ausdrucks an und gibt, wenn er null ist, stattdessen den im zweiten Argument angegebenen Wert zurück.
Die aktualisierte Abfragesyntax lautet wie folgt:
SELECT sc.*, IFNULL(MIN(s.price), 0) AS minp, IFNULL(MAX(s.price), 0) AS maxp FROM categories AS sc LEFT JOIN products AS s ON s.ownerid = sc.id GROUP BY sc.id
Durch die Verwendung eines äußeren Joins und der Funktion IFNULL() können wir alle Kategorien abrufen und sicherstellen, dass Kategorien ohne Produkte mit Minp- und Maxp-Werten von 0 dargestellt werden. Diese Abfrage bewältigt effektiv die Notwendigkeit, aus zwei Tabellen auszuwählen auch wenn nicht alle Zeilen in einer Tabelle entsprechende Einträge in der anderen haben.
Das obige ist der detaillierte Inhalt vonWie rufe ich alle Kategorien und ihre minimalen/maximalen Produktpreise in MySQL ab, auch wenn einige Kategorien keine Produkte haben?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!