当前位置: 首页 > 知识库问答 >
问题:

如何从PostgreSQL中的json数组中获取具有唯一编号的元素?

秦育
2023-03-14

我有一张银行账户表:

    Column     |         Type          |                                Modifiers                                | Storage  | Stats target | Description 
---------------+-----------------------+-------------------------------------------------------------------------+----------+--------------+-------------
 id            | integer               | not null default nextval('bank_accounts_id_seq'::regclass)              | plain    |              | 
 name          | character varying(50) |                                                                         | extended |              | 
 bank_accounts | jsonb                 | not null                                                                | extended |              | 

它在jsonb列中有一些JSON:

 id | name  |                              bank_accounts                               
----+-------+--------------------------------------------------------------------------
  1 | test1 | [{"name": "acct1", "balance": -500}, {"name": "acct2", "balance": -300}]

我使用jsonb\u array\u元素来获取一个用户的帐户列表:

select jsonb_array_elements(bank_accounts)->>'name' as name, jsonb_array_elements(bank_accounts)->>'balance' as balance from bank_accounts;
 name  | balance 
-------+---------
 acct1 | -500
 acct2 | -300

太好了。但我如何让每一行都有一个唯一的id呢?我想将每一行映射到一个hibernate对象,但我很难做到这一点,因为我找不到让每一行都具有唯一id的方法。

共有1个答案

厉永宁
2023-03-14

使用JOIN LATERAL尝试不同的、干净的方法:

SELECT b.id, t.rn
     , t.account->>'name' AS name
     , t.account->>'balance' AS balance
FROM   bank_accounts b
LEFT   JOIN LATERAL jsonb_array_elements(b.bank_accounts)
                    WITH ORDINALITY AS t (account, rn) ON true;

如果您不喜欢在银行账户中有空值或空值的行,请使用更简单的交叉联接:

SELECT ...
FROM   bank_accounts b
     , jsonb_array_elements(b.bank_accounts) WITH ORDINALITY AS t (account, rn);

关键成分是with ORDINALITY,用于动态生成设置返回函数的行号。它是在Postgres 9.4中引入的——就像jsonb一样。

rn银行账户中每个基础行都是唯一的
要在整个结果集中保持唯一性,请将其与b.id结合使用。

关于带序数的:

  • 带有元素号的PostgreSQL unnest()

相关:

  • 查询JSON类型内的数组元素
  • 如何在PostgreSQL 9.4中将简单的json(b)int数组转换为整数[]
 类似资料:
  • 问题内容: 我和这里的问题差不多。 我有一个包含等的数组。现在,我想从该数组中选择所有唯一元素。思想,这将是简单的用或因为他们在其他问题中提到,但没有在数组中改变…的代码是: 我究竟做错了什么? 问题答案: 有点hacky,但是应该这样做: 要将排序后的唯一结果保存回数组,请执行数组分配: 如果您的外壳支持herestrings(应该),则可以通过将其更改为以下内容来节省进程: 输入: 输出: 说

  • 问题内容: jQuery.unique允许您获取数组的唯一元素,但是文档说该函数主要供内部使用,并且仅对DOM元素起作用。另一个SO响应说该函数可以在数字上使用,但是此用例不一定是将来的证明,因为在文档中未明确说明。 鉴于此,是否存在“标准” jQuery函数,用于仅访问数组中的唯一值(特别是整数之类的基元)?(显然,我们可以使用函数构造一个循环,但是我们是jQuery的新手,并且想知道是否为此使

  • 问题内容: 如何获得数组中唯一值的列表?我是否总是必须使用第二个数组,或者是否有类似于JavaScript中Java哈希表的东西? 我将仅使用 JavaScript 和 jQuery 。不能使用其他库。 问题答案: 由于我在@Rocket答案的注释中继续进行了讨论,因此我不妨提供一个不使用任何库的示例。这需要两个新的原型函数,并且 为了提高可靠性,可以用MDN的垫片代替,并检查每个元素的值是否等于

  • 我有以下数组 我想从这个数组中得到唯一的值。所以我希望我的结果是这样的 我使用了数组唯一函数,但无法得到结果 如果我有两个索引,这是有效的,但是对于多个索引呢?

  • 我想从这个链接获取一个url: 它给出结果: { " data ":{ " URL ":" https://FBC dn-profile-a . akamaihd . net/hprofile-AK-xa P1/t 1.0-1/s200x 200/10342822 _ 10202261537234765 _ 3194866551853134720 _ n . jpg "," is_silhouet

  • 问题内容: 编辑:这不是如何获取列表元素的所有可能组合的精确重复? 本主题是关于查找唯一组合,而另一主题是关于查找所有组合。 如果我有python列表: 从以下列表中获取3个元素的所有可能 唯一组合 的最佳方法是什么: 组合中元素的顺序无关紧要。例如,和将被视为相同的组合。 我可能可以编写一些循环来执行此操作,但我认为可能会有一个单行代码可以执行相同操作。 问题答案: 您需要: