Maison > base de données > tutoriel mysql > Comment préserver l'ordre des éléments du tableau lors de la jonction de tables PostgreSQL avec des champs de tableau ?

Comment préserver l'ordre des éléments du tableau lors de la jonction de tables PostgreSQL avec des champs de tableau ?

Linda Hamilton
Libérer: 2024-12-27 07:49:10
original
792 Les gens l'ont consulté

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

Implémentation de PostgreSQL JOIN avec le type de tableau et préservation de l'ordre des éléments du tableau

Problème :
Récupérer les données de la table des éléments, en conservant l'ordre d'éléments dans le champ de type de tableau dans la table some_chosen_data_in_order pour un rangée.

Tentative n° 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 = ?
Copier après la connexion

Tentative n°2 : Sous-requête

SELECT I.* FROM items AS I
WHERE I.id = ANY
(ARRAY[SELECT S.id_items FROM some_chosen_data_in_order WHERE id = ?])
Copier après la connexion

Aucune de ces approches ne préserve l'ordre des éléments dans le array.

Solution :

SELECT t.*
FROM unnest(ARRAY[1,2,3,2,3,5]) item_id
LEFT JOIN items t on t.id=item_id
Copier après la connexion

Cette requête désimbrique le tableau en lignes individuelles, en préservant l'ordre des éléments. Il joint ensuite les éléments résultants à la table des éléments en fonction du champ id.

Exemple :

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

La requête ci-dessus renverra le résultat suivant :

id data
2 foo
4 bar
233 baz
5 qux

Explication :

La fonction unnest décompresse le tableau dans un tableau avec une ligne par élément. Le LEFT JOIN garantit que tous les éléments du tableau sont renvoyés, y compris ceux qui n'ont pas de lignes correspondantes dans la table des éléments.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal