Heim >Datenbank >MySQL-Tutorial >Wie rufe ich verwandte Datensätze aus verschiedenen Datenbanktabellen in einer einzigen Abfrage ab?

Wie rufe ich verwandte Datensätze aus verschiedenen Datenbanktabellen in einer einzigen Abfrage ab?

Patricia Arquette
Patricia ArquetteOriginal
2024-12-22 03:23:14716Durchsuche

How to Retrieve Related Records from Different Database Tables in a Single Query?

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!

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