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

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

Linda Hamilton
Freigeben: 2024-12-29 19:18:11
Original
604 Leute haben es durchsucht

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

Abrufen mehrerer Datensätze basierend auf Beziehungen

Beim Umgang mit Datenbanktabellen mit Beziehungen besteht eine häufige Aufgabe darin, Informationen aus mehreren Tabellen basierend auf Beziehungen abzurufen eine bestimmte Beziehung. Betrachten Sie beispielsweise zwei Tabellen: Organisation und Mitarbeiter, wobei eine Organisation mehrere Mitarbeiter haben kann. Ziel ist es, alle Informationen über eine bestimmte Organisation, einschließlich der Vornamen aller ihrer Mitarbeiter, in einem einzigen Datensatz abzurufen.

Datenbankspezifische Lösungen

Die Der geeignete Ansatz für diese Aufgabe variiert je nach verwendetem Datenbanksystem. Einige gängige Datenbanksysteme bieten spezifische Funktionen oder Features, die die Gruppenverkettung erleichtern können, den Prozess der Kombination mehrerer Werte in einer einzigen Zeichenfolge:

  • MySQL: Verwenden Sie die Funktion GROUP_CONCAT, um die zu verketten Vornamen der Mitarbeiter basierend auf den Angaben der Organisation ID.
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 9.0 stellt die STRING_AGG-Funktion für die Gruppenverkettung bereit, mit der die Vornamen der Mitarbeiter mit einem Komma angehängt werden können. Raum Trennzeichen.
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 bietet die LISTAGG-Funktion zum Verketten von Werten.
select 
  o.ID, o.Address, o.OtherDetails,
  LISTAGG((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
  • MS SQL Server: MS SQL Server 2017 und später führte die Funktion STRING_AGG ein für Gruppenverkettung.
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

Fallback-Lösungen

In Datenbanksystemen, denen native Gruppenverkettungsfunktionen fehlen, oder für ältere Versionen unterstützter Datenbanken können Fallback-Lösungen verwendet werden eingesetzt werden:

  • Erstellen Sie eine gespeicherte Prozedur, die die ID der Organisation akzeptiert und die verkettete zurückgibt Namen der Mitarbeiter. Integrieren Sie diese gespeicherte Prozedur in die Abfrage.
select 
  o.ID, o.Address, o.OtherDetails,
  MY_CUSTOM_GROUP_CONCAT_PROCEDURE( o.ID ) as Employees
from 
  organization o
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonWie rufe ich verwandte Datensätze aus mehreren Datenbanktabellen in einer einzigen Abfrage ab?. 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