Heim > Datenbank > MySQL-Tutorial > Wie wähle ich Daten aus mehreren MySQL-Tabellen aus und gehe mit fehlenden Korrespondenzen um?

Wie wähle ich Daten aus mehreren MySQL-Tabellen aus und gehe mit fehlenden Korrespondenzen um?

Susan Sarandon
Freigeben: 2024-12-29 20:57:11
Original
282 Leute haben es durchsucht

How to Select Data from Multiple MySQL Tables and Handle Missing Correspondences?

Auswählen von Daten aus mehreren Tabellen mit MySQL, Umgang mit fehlenden Korrespondenzen

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.

Problemstellung

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

Diese Abfrage ruft jedoch nur Kategorien ab, denen Produkte zugeordnet sind. Diejenigen ohne Produkte werden weggelassen, was zu unvollständigen Ergebnissen führt.

Lösung

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

Erklärung

  • LEFT JOIN: Die LEFT JOIN-Syntax stellt sicher, dass alle Zeilen aus der linken Tabelle (Kategorien) werden einbezogen, auch wenn sie keine passenden Zeilen in der rechten Tabelle (Produkte) haben.
  • IFNULL: Wir verwenden zur Verarbeitung die Funktion IFNULL() Mögliche Nullwerte für minp und maxp in Fällen, in denen es in einer Kategorie an Produkten mangelt. Es ersetzt Null durch 0 und gibt einen Standardwert anstelle von Null zurück.

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.

Überlegungen

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!

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