ホームページ >データベース >mysql チュートリアル >PostgreSQL テーブルを配列フィールドで結合するときに配列要素の順序を保持するにはどうすればよいですか?

PostgreSQL テーブルを配列フィールドで結合するときに配列要素の順序を保持するにはどうすればよいですか?

Linda Hamilton
Linda Hamiltonオリジナル
2024-12-27 07:49:10791ブラウズ

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

配列型を使用した PostgreSQL JOIN の実装と配列要素の順序の保持

問題:
順序を維持しながら items テーブルからデータを取得する特定の some_chosen_data_in_order テーブルの配列型フィールドの要素の数row.

試行 #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 = ?

試行 #2: サブクエリ

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

これらのアプローチはどちらも、要素内の順序を保持しません。 array.

解決策:

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

このクエリは、要素の順序を維持しながら、配列を個々の行にネスト解除します。次に、結果の項目を id フィールドに基づいて項目テーブルに結合します。

例:

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

上記のクエリは次の結果を返します:

id data
2 foo
4 bar
233 baz
5 qux

説明:

unnest 関数は、要素ごとに 1 行のテーブルに配列を解凍します。 LEFT JOIN により、項目テーブルに対応する行がない項目も含めて、配列のすべての項目が返されるようになります。

以上がPostgreSQL テーブルを配列フィールドで結合するときに配列要素の順序を保持するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。