1

在我的 PostgreSQL 数据库中,我有以下架构:

CREATE TABLE referral_datas (
    id integer,
    referrals jsonb
);

INSERT INTO referral_datas (id, referrals)
  VALUES (1, '[{"risk_score": "1"}]');

INSERT INTO referral_datas (id, referrals)
  VALUES (2, '[{"risk_score": "2"}]');

INSERT INTO referral_datas (id, referrals)
  VALUES (3, '[{"risk_score": "3"}]');

和以下查询:

select * from referral_datas where referrals @> '[{"risk_score": "2"}]'

它返回以下结果:

    id | referrals
----------------------------------------
    2  | [{"risk_score":"2"}]

查询工作正常,但我想要一个查询来查找推荐数据risk_score = 2risk_score = 1

所以查询的结果应该是:

    id | referrals
----------------------------------------
    1  | [{"risk_score":"1"}]
    2  | [{"risk_score":"2"}]

我怎样才能在 PostgreSQL 中做到这一点?

这是您可以尝试的 db fiddle:

https://www.db-fiddle.com/f/pP3AudKgUs242YJjR9mxaS/2

4

2 回答 2

1

您可以在过滤之前扩展jsonb 数组。使用jsonb_array_elements它:

SELECT 
    * 
FROM 
    referral_datas c 
    JOIN jsonb_array_elements(c.referrals) AS foo(bar) ON TRUE
WHERE
    foo.bar->>'risk_score' IN ('1', '2');

请注意,这可能不会使用您在referral_datas.referrals. 如果您的数据不是那么大,那也没关系。小心使用。

于 2018-10-17T11:23:41.467 回答
0

我想出了这个查询:

SELECT id,referrals FROM referral_datas
WHERE referrals->0->>'risk_score' IN ('1','2');
于 2018-10-17T08:59:37.840 回答