Heim >Datenbank >MySQL-Tutorial >Wie rufe ich verwandte Datensätze aus verschiedenen Datenbanktabellen in einer einzigen Abfrage ab?
Abrufen verwandter Datensätze in einer einzigen Abfrage
Im Bereich relationaler Datenbanken ist es häufig erforderlich, mehrere Datensätze aus verschiedenen Tabellen abzufragen, die gemeinsam genutzt werden eine Beziehung. Ein häufiges Szenario ist das Abrufen aller Informationen über eine bestimmte Organisation zusammen mit den Vornamen aller ihrer Mitarbeiter.
Um dies zu erreichen, können wir verschiedene datenbankspezifische Techniken nutzen, wie unten beschrieben:
MySQL und PostgreSQL:
Verwendung der integrierten Funktion GROUP_CONCAT in MySQL oder string_agg() in PostgreSQL, Wir können alle Vornamen von Mitarbeitern einer bestimmten Organisation zusammenfassen und in einer einzigen Zeichenfolge zusammenfassen:
SELECT o.ID, o.Address, o.OtherDetails, GROUP_CONCAT(e.firstname) AS Employees FROM organization AS o JOIN employee AS e ON o.org_id = e.org_id GROUP BY o.org_id;
PostgreSQL 9.0 und höher:
PostgreSQL 9.0 und führte später die Funktion STRING_AGG ein, die mehr Flexibilität ermöglicht Verkettung:
SELECT o.ID, o.Address, o.OtherDetails, STRING_AGG(e.firstname || ' ' || e.lastname, ', ') AS Employees FROM organization AS o JOIN employee AS e ON o.org_id = e.org_id GROUP BY o.org_id;
Oracle:
Oracle stellt hierfür die LISTAGG-Funktion zur Verfügung:
SELECT o.ID, o.Address, o.OtherDetails, LISTAGG(e.firstname, ', ') AS Employees FROM organization AS o JOIN employee AS e ON o.org_id = e.org_id GROUP BY o.org_id;
MS SQL Server:
MS SQL Server bietet den STRING_AGG Funktion:
SELECT o.ID, o.Address, o.OtherDetails, STRING_AGG(e.firstname, ', ') AS Employees FROM organization AS o JOIN employee AS e ON o.org_id = e.org_id GROUP BY o.org_id;
Fallback-Lösung für andere Datenbanken:
Wenn Ihre Datenbank keine dieser integrierten Funktionen unterstützt, können Sie sich für eine Fallback-Lösung entscheiden indem Sie eine gespeicherte Prozedur erstellen, die die Organisations-ID als Eingabe verwendet und die Mitarbeiternamen entsprechend verkettet:
SELECT o.ID, o.Address, o.OtherDetails, MY_CUSTOM_GROUP_CONCAT_PROCEDURE(o.ID) AS Employees FROM organization AS o;
Durch den Einsatz dieser Techniken können Sie effizient arbeiten Rufen Sie mehrere Datensätze aus verwandten Tabellen ab und präsentieren Sie sie in konsolidierter Form, sodass keine mehreren Abfragen oder zeilenweisen Datenassemblierung erforderlich sind.
Das obige ist der detaillierte Inhalt vonWie rufe ich verwandte Datensätze aus verschiedenen Datenbanktabellen in einer einzigen Abfrage ab?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!