首页 >数据库 >mysql教程 >将 PostgreSQL 表与数组字段连接时如何保留数组元素顺序?

将 PostgreSQL 表与数组字段连接时如何保留数组元素顺序?

Linda Hamilton
Linda Hamilton原创
2024-12-27 07:49:10793浏览

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

使用数组类型实现 PostgreSQL JOIN 并保留数组元素顺序

问题:
从 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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn