我有兩個表如下
accounts
------------------------------------------
| ID | LOCATIONS |
|------------------------------------------|
| 1 | [{ "id" : 1}, { "id" : 3 }] |
|------------------------------------------|
| 2 | [] |
------------------------------------------
regions
----------------------------
| ID | DATA |
|---------------------------|
| 1 | {"name": "South"} |
|---------------------------|
| 2 | {"name": "West"} |
|---------------------------|
| 3 | {"name": "North"} |
|---------------------------|
| 4 | {"name": "East"} |
---------------------------
locations 是型別 jsonb[]
現在我想得到如下結果
------
| NAME |
|------|
| South|
|------|
| North|
------
請幫助使用 postgresql 查詢以獲取此資訊。
uj5u.com熱心網友回復:
編輯jsonb[]型別:
演示
select
r.data ->> 'name' as name
from
accounts a
cross join unnest(a.locations) al
inner join regions r on r.id = (al ->> 'id')::int
PS:對于jsonb型別:
您可以使用jsonb_to_recordset函式并將CROSS JOINJSON 陣列記錄與表連接起來。
演示
select
r.data ->> 'name' as name
from
accounts a
cross join jsonb_to_recordset(a.locations) as al(id int)
inner join regions r on r.id = al.id
uj5u.com熱心網友回復:
一種選擇是JSONB_ARRAY_ELEMENTS()與交叉連接一起使用,例如
SELECT r.data->>'name' AS "Name"
FROM accounts AS a,
regions AS r,
JSONB_ARRAY_ELEMENTS(a.locations) AS l
WHERE (value->>'id')::INT = r.id
Demo
PS。如果資料型別locations是JSON而不是JSONB,則只需將當前函式替換為JSON_ARRAY_ELEMENTS()
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/415508.html
標籤:
