問題:
順序を維持しながら 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 サイトの他の関連記事を参照してください。