在我的PostgreSQL数据库中,我具有以下架构:
var map = L.map('map', {
crs: L.CRS.Simple,
zoomDelta: 0.50,
zoomSnap: 0,
minZoom: -1,
maxZoom: 1.5 ,
touchZoom: true,
fullscreenControl: true,
});
var bounds = [[0,0], [1000,1000]];
var image = L.imageOverlay('./images/map.svg', bounds).addTo(map);
以及以下查询:
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 = 2
查找推荐数据
因此查询结果应为:
risk_score = 1
如何在PostgreSQL中做到这一点?
这是数据库提琴,您可以尝试:
答案 0 :(得分: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
上创建的任何索引。如果您的数据不是很大,那没关系。小心使用。
答案 1 :(得分:0)
我想到了这个查询:
SELECT id,referrals FROM referral_datas
WHERE referrals->0->>'risk_score' IN ('1','2');