Auswahl aus mehreren Tabellen mit fehlender Korrespondenz in MySQL
Um effektiv mehrere Tabellen abzufragen, selbst in Szenarien, in denen nicht alle Zeilen in einer Tabelle vorhanden sind Wenn Sie entsprechende Einträge in einem anderen haben, bietet MySQL das Konzept der Outer-Joins. Stellen Sie sich das Szenario eines Online-Shops mit Kategorien und Produkttabellen vor.
Angenommen, wir möchten alle Kategorien abrufen und für jede Kategorie Mindest- und Höchstpreise berechnen. Wir möchten jedoch Kategorien ohne Produkte einschließen und ihre Mindest- und Höchstpreise auf 0 setzen. Die ursprüngliche Abfrage:
SELECT sc.*, MIN(s.price) AS minp, MAX(s.price) AS maxp FROM categories AS sc, products AS s WHERE s.ownerid=sc.id GROUP BY sc.id
Kategorien ohne Produkte werden aufgrund der Inner-Join-Bedingung ausgeschlossen. Um alle Kategorien einzubeziehen, verwenden wir einen LEFT JOIN:
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
Der LEFT JOIN behält alle Zeilen in der Kategorientabelle (sc) bei, sodass die Abfrage alle Kategorien abrufen kann, einschließlich derjenigen ohne Produkte. Die IFNULL-Funktion setzt Nullwerte (die auftreten, wenn keine entsprechenden Produkte vorhanden sind) auf 0 und stellt so sicher, dass minp und maxp immer mit einem gültigen Wert zurückgegeben werden.
Dieser Ansatz stellt sicher, dass die Abfrage alle Kategorien abruft, unabhängig davon ob sie entsprechende Produkte haben, und es weist korrekterweise 0 für fehlende Preisinformationen zu.
Das obige ist der detaillierte Inhalt vonWie kann ich alle Kategorien und ihre minimalen/maximalen Produktpreise, einschließlich Kategorien ohne Produkte, in MySQL abrufen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!