Abrufen mehrerer mit einer Organisation verknüpfter Mitarbeiterdatensätze in einem einzigen Ergebnissatz
Die vorliegende Aufgabe besteht darin, alle Details einer bestimmten Organisation abzurufen zusammen mit den Vornamen seiner Mitarbeiter. Um diese Herausforderung zu bewältigen, muss man einen datenbankanbieterspezifischen Ansatz in Betracht ziehen, da es in SQL-92 oder SQL-99 keine universelle Lösung gibt.
Im Fall von MySQL ermöglicht die Funktion GROUP_CONCAT einen effizienten Abruf von verkettete Werte. Eine Abfrage, die diese Funktion verwendet, könnte wie folgt aussehen:
SELECT o.ID, o.Address, o.OtherDetails, GROUP_CONCAT( CONCAT(e.firstname, ' ', e.lastname) ) AS Employees FROM employees e JOIN organization o ON o.org_id=e.org_id GROUP BY o.org_id;
PostgreSQL 9.0 bietet eine ebenso einfache Lösung mit der Funktion STRING_AGG:
SELECT o.ID, o.Address, o.OtherDetails, STRING_AGG( (e.firstname || ' ' || e.lastname), ', ' ) AS Employees FROM employees e JOIN organization o ON o.org_id=e.org_id GROUP BY o.org_id;
Für Versionen von PostgreSQL vor 9.0 ist die Funktion CREATE Der Befehl AGGREGATE ermöglicht benutzerdefinierte Aggregatfunktionsdefinitionen.
Oracle verwendet LISTAGG für ähnliche Funktionen, während MS SQL Der Server verwendet STRING_AGG.
In Ermangelung integrierter Gruppenverkettungsfunktionen besteht eine Fallback-Option darin, eine gespeicherte Prozedur zu erstellen, die die Organisations-ID als Eingabe akzeptiert und die verketteten Mitarbeiternamen zurückgibt. Diese gespeicherte Prozedur kann dann in einer Abfrage verwendet werden:
SELECT o.ID, o.Address, o.OtherDetails, MY_CUSTOM_GROUP_CONCAT_PROCEDURE( o.ID ) AS Employees FROM organization o;
Durch die Verwendung dieser herstellerspezifischen Ansätze ist es möglich, mehrere Mitarbeiterdatensätze einer einzelnen Organisation in einem einzigen Ergebnissatz abzurufen.
Das obige ist der detaillierte Inhalt vonWie kann ich alle Mitarbeiterdatensätze für eine bestimmte Organisation in einer einzigen SQL-Abfrage abrufen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!