我想在另一個表 B 中查找一個屬性,其中源是表 A 的 JSONB 列中逗號分隔字串的一部分。
create table option
(
optionid bigint not null primary key,
attributevalues jsonb default '{}'::jsonb
);
create table district
(
districtid bigint not null primary key,
uid varchar(11) not null,
name varchar(230) not null unique
);
INSERT into option values (1, '{"value": "N8UXIAycxy3,uVwyu3R4nZG,fuja8k8PCFO,y0eUmlYp7ey", "attribute": {"id": "K54wAf6EX0s"}}'::jsonb);
INSERT INTO district (districtid, uid, name) VALUES
(1, 'N8UXIAycxy3', 'district1'),
(2, 'uVwyu3R4nZG', 'district2'),
(3, 'fuja8k8PCFO', 'district3'),
(4, 'y0eUmlYp7ey', 'district4');
我可以將所有專案拆分,,但如何“加入”以查找名稱(例如N8UXIAycxy3--> district1)?
我試圖在傳統意義上“加入”,但這不起作用,因為district_uid查詢無法訪問:
SELECT UNNEST(STRING_TO_ARRAY(co.attributevalues #>> '{"K54wAf6EX0s", "value"}', ',')) AS district_uid
FROM option o
JOIN district d on district_uid = d.uid;
我想要查詢結果:district1,district2,district3,district4. 這是可能的還是我需要一個回圈?
資料庫小提琴
uj5u.com熱心網友回復:
您需要將逗號分隔的字串轉換為陣列,即attributevalues->>'value':
select name
from option
cross join unnest(string_to_array(attributevalues->>'value', ',')) as district_uid
join district on uid = district_uid
資料庫小提琴。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/391473.html
標籤:PostgreSQL的 jsonb
下一篇:根據特定列洗掉重復行
