Heim > Datenbank > MySQL-Tutorial > Wie können Daten aus Eins-zu-Viele-Beziehungen in SQL effizient verkettet werden?

Wie können Daten aus Eins-zu-Viele-Beziehungen in SQL effizient verkettet werden?

Susan Sarandon
Freigeben: 2024-12-29 12:02:12
Original
154 Leute haben es durchsucht

How to Efficiently Concatenate Data from One-to-Many Relationships in SQL?

Beherrschung der Gruppenverkettung für Eins-zu-Viele-Beziehungen in SQL

In relationalen Datenbanken ist es häufig erforderlich, Informationen aus Tabellen abzurufen haben Eins-zu-Viele-Beziehungen. Ein häufiges Szenario besteht darin, Daten über einen übergeordneten Datensatz und die zugehörigen untergeordneten Datensätze zu sammeln.

Betrachten Sie das Beispiel einer Organisationstabelle und einer Mitarbeitertabelle, wobei jede Organisation mehrere Mitarbeiter haben kann. Um alle Informationen über eine bestimmte Organisation zusammen mit den Vornamen aller ihrer Mitarbeiter abzurufen, erkunden wir verschiedene Ansätze.

Standard-SQL-Techniken

Leider sind Standard-SQL- 92 und SQL-99 enthalten keine integrierten Funktionen für die Gruppenverkettung. Es sind herstellerspezifische Lösungen erforderlich.

MySQL

MySQL bietet die Funktion GROUP_CONCAT an:

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

PostgreSQL

PostgreSQL-Versionen 9.0 und höher stellen STRING_AGG bereit Funktion:

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

Oracle

Oracle nutzt die LISTAGG-Funktion:

SELECT
  o.ID,
  o.Address,
  o.OtherDetails,
  LISTAGG(e.FirstName || ' ' || e.LastName, ', ') WITHIN GROUP (ORDER BY e.FirstName) AS Employees
FROM
  Employees e
INNER JOIN
  Organization o
ON
  o.Org_ID = e.Org_ID
GROUP BY
  o.Org_ID;
Nach dem Login kopieren

Fallback-Lösung

Wenn herstellerspezifische Funktionen nicht verfügbar sind, können gespeicherte Prozeduren erstellt werden, um diese auszuführen Verkettung.

Beispiel für eine gespeicherte Prozedur (generisch)

CREATE PROCEDURE MY_CUSTOM_GROUP_CONCAT_PROCEDURE
(
  @Org_ID INT
)
AS
BEGIN
  DECLARE @Employees NVARCHAR(MAX) = '';
  SELECT @Employees = @Employees + FirstName + ' ' + LastName + ', '
  FROM Employees
  WHERE Org_ID = @Org_ID;
  
  SELECT @Employees = LEFT(@Employees, LEN(@Employees) - 2);
  RETURN @Employees;
END
GO;
Nach dem Login kopieren

Verwendung

SELECT
  o.ID,
  o.Address,
  o.OtherDetails,
  MY_CUSTOM_GROUP_CONCAT_PROCEDURE(o.ID) AS Employees
FROM
  Organization o;
Nach dem Login kopieren

Durch die Nutzung dieser Techniken Entwickler können mit einem Datensatz verknüpfte Multi-Record-Informationen effizient abrufen und so eine ganzheitliche Sicht auf die Daten im Eins-zu-Viele-Prinzip bereitstellen Beziehungen.

Das obige ist der detaillierte Inhalt vonWie können Daten aus Eins-zu-Viele-Beziehungen in SQL effizient verkettet werden?. 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