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
Linda HamiltonOriginal
2024-12-27 07:49:10830Durchsuche

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 = ?

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 = ?])

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

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!

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