Heim >Datenbank >MySQL-Tutorial >Wie kann ich alle Mitarbeiterdatensätze für eine bestimmte Organisation in einer einzigen SQL-Abfrage abrufen?

Wie kann ich alle Mitarbeiterdatensätze für eine bestimmte Organisation in einer einzigen SQL-Abfrage abrufen?

Patricia Arquette
Patricia ArquetteOriginal
2024-12-19 09:15:10960Durchsuche

How Can I Retrieve All Employee Records for a Specific Organization in a Single SQL Query?

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!

Stellungnahme:
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