Die ursprüngliche Frage war datenbankspezifisch, aber vielleicht ist dies ein guter Ort, um eine allgemeinere Antwort aufzunehmen. Es ist eine häufige Frage. Das Konzept, das Sie beschreiben, wird oft als "Gruppenkonkatenation" bezeichnet. Es gibt keine Standardlösung in SQL-92 oder SQL-99. Sie benötigen also eine herstellerspezifische Lösung.
MySQL - Wahrscheinlich die einfachste Lösung. Verwenden Sie die integrierte GROUP_CONCAT-Funktion. In Ihrem Beispiel würden Sie so etwas wie dies wollen:
select
o.ID, o.Address, o.OtherDetails,
GROUP_CONCAT(concat(e.firstname, ' ', e.lastname)) as Employees
from
employees e
inner join organization o on o.org_id=e.org_id
group by o.org_id
- PostgreSQL - EDIT: 9.0 PostgreSQL ist ebenso einfach jetzt, dass string_agg (Ausdruck, Trennzeichen) ist eingebaut. Hier ist es mit ‚Komma-Raum‘ zwischen den Elementen:
select
o.ID, o.Address, o.OtherDetails,
STRING_AGG((e.firstname || ' ' || e.lastname), ', ') as Employees
from
employees e
inner join organization o on o.org_id=e.org_id
group by o.org_id
PostgreSQL vor 9.0 können Sie Ihre eigenen Aggregatfunktionen definieren, mit AGGREGATEN CREATE. Etwas mehr Arbeit als MySQL, aber viel flexibler. Siehe hierzu other post für weitere Details. (Natürlich PostgreSQL 9.0 und später über diese Option auch.)
- Oracle & MS SQL Server - Erstellen Sie eine gespeicherte Prozedur, die die Org_ID als seine Eingabe nimmt und gibt die verketteten Mitarbeiternamen. Verwenden Sie dann diese gespeicherte Prozedur in Ihrer Abfrage. Einige der anderen Antworten hier enthalten einige Details darüber, wie gespeicherte Prozeduren wie diese geschrieben werden.
select
o.ID, o.Address, o.OtherDetails,
MY_CUSTOM_GROUP_CONCAT_PROCEDURE(o.ID) as Employees
from
organization o
- Andere DBMS-Technologien - Die gespeicherte Prozedur Route am wahrscheinlichsten ist. Vielleicht können andere diese Antwort mit mehr technologiespezifischen Antworten aktualisieren.
Natürlich, sobald die Summe aller Ihrer Mitarbeiter Namen, Plus Kommas und Leerzeichen erreichen 8000 - Sie haben ein Problem! – Valerion