Bei der Pflege eines Online-Shops kann es vorkommen, dass Sie auf Situationen stoßen, in denen Sie Daten aus mehreren Tabellen abrufen müssen, z als Kategorien und Produkte. Allerdings entstehen Herausforderungen, wenn nicht alle Zeilen in einer Tabelle entsprechende Einträge in der anderen haben. Um dieses Szenario anzugehen, untersuchen wir, wie man Daten aus zwei Tabellen auswählt und dabei sicherstellt, dass alle Zeilen zurückgegeben werden, auch wenn ihnen Entsprechungen fehlen.
Betrachten Sie zwei Tabellen, eine für Kategorien mit die Spalten „id“ und „title“ und die andere für Produkte mit den Spalten „id“, „ownerid“, „title“ und „price“, wobei „ownerid“ auf die ID der übergeordneten Kategorie verweist. Mit der folgenden Abfrage möchten Sie alle Kategorien zusammen mit den Mindest- und Höchstpreisen für jede Kategorie abrufen:
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
Diese Abfrage ruft jedoch nur Kategorien ab, denen Produkte zugeordnet sind. Diejenigen ohne Produkte werden weggelassen, was zu unvollständigen Ergebnissen führt.
Um dieses Problem zu beheben und die Auswahl aller Kategorien sicherzustellen, unabhängig davon, ob sie entsprechende Produkte haben, verwenden wir ein Konzept namens der „äußere Join“. Im Wesentlichen schließt ein äußerer Join Zeilen aus einer Tabelle ein, auch wenn sie keine Übereinstimmungen in der anderen Tabelle haben.
Mit der LEFT JOIN-Syntax ändern wir unsere Abfrage 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
Mit dieser aktualisierten Abfrage können Sie alle Kategorien und ihre jeweiligen Mindest- und Höchstpreise abrufen. Kategorien ohne Produkte haben Minp- und Maxp-Werte von 0 und erfüllen damit die Anforderung, alle Kategorien einzuschließen.
Als Alternative zur Verwendung von 0 als Standardwert für leere Kategorien können Sie sich dafür entscheiden um stattdessen null zurückzugeben. Ob Sie 0 oder Null verwenden, hängt von den spezifischen Anforderungen Ihrer Anwendung ab.
Indem Sie die Konzepte von Outer-Joins und den Umgang mit Nullwerten in MySQL beherrschen, können Sie Daten effektiv aus mehreren Tabellen extrahieren und so Vollständigkeit und Genauigkeit in Ihrer Anwendung sicherstellen Ergebnisse.
Das obige ist der detaillierte Inhalt vonWie wähle ich Daten aus mehreren MySQL-Tabellen aus und gehe mit fehlenden Korrespondenzen um?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!