Heim > Datenbank > MySQL-Tutorial > Wie kann die Reihenfolge der Array-Elemente beim Verknüpfen von PostgreSQL-Tabellen mit Array-Feldern beibehalten werden?

Wie kann die Reihenfolge der Array-Elemente beim Verknüpfen von PostgreSQL-Tabellen mit Array-Feldern beibehalten werden?

Linda Hamilton
Freigeben: 2024-12-27 07:49:10
Original
792 Leute haben es durchsucht

How to Preserve Array Element Order When Joining PostgreSQL Tables with Array Fields?

PostgreSQL JOIN mit Array-Typ implementieren und die Reihenfolge der Array-Elemente beibehalten

Problem:
Daten aus der Artikeltabelle abrufen und dabei die Reihenfolge beibehalten der Elemente im Feld „Array-Typ“ in der Tabelle „some_chosen_data_in_order“ für einen bestimmten Zeile.

Versuch #1: JOIN

SELECT I.* FROM items AS I
JOIN some_chosen_data_in_order AS S ON I.id = ANY(S.id_items)
WHERE S.id = ?
Nach dem Login kopieren

Versuch #2:Unterabfrage

SELECT I.* FROM items AS I
WHERE I.id = ANY
(ARRAY[SELECT S.id_items FROM some_chosen_data_in_order WHERE id = ?])
Nach dem Login kopieren

Keiner dieser Ansätze bewahrt die Reihenfolge der Elemente im Array.

Lösung:

SELECT t.*
FROM unnest(ARRAY[1,2,3,2,3,5]) item_id
LEFT JOIN items t on t.id=item_id
Nach dem Login kopieren

Diese Abfrage entschachtelt das Array in einzelne Zeilen und behält dabei die Elementreihenfolge bei. Anschließend verknüpft es die resultierenden Elemente mit der Elementtabelle basierend auf dem ID-Feld.

Beispiel:

ID items_data
1 {2,4,233,5}

Die obige Abfrage gibt das folgende Ergebnis zurück:

id data
2 foo
4 bar
233 baz
5 qux

Erklärung:

Die Unnest-Funktion wird entpackt das Array in eine Tabelle mit einer Zeile pro Element. Der LEFT JOIN stellt sicher, dass alle Elemente aus dem Array zurückgegeben werden, einschließlich derjenigen, die keine entsprechenden Zeilen in der Elementtabelle haben.

Das obige ist der detaillierte Inhalt vonWie kann die Reihenfolge der Array-Elemente beim Verknüpfen von PostgreSQL-Tabellen mit Array-Feldern beibehalten 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