问题:
从 items 表中检索数据,保持顺序特定的 some_chosen_data_in_order 表中数组类型字段中的元素数量行。
尝试 #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 函数将数组解包到一个表中,每个元素一行。 LEFT JOIN 确保返回数组中的所有项目,包括那些在项目表中没有相应行的项目。
以上是将 PostgreSQL 表与数组字段连接时如何保留数组元素顺序?的详细内容。更多信息请关注PHP中文网其他相关文章!