想象一下,我們jsonb在 PostgreSQL 上使用了下表:
create table writer
(
"firstName" varchar,
"surName" varchar,
books jsonb
);
并且可以獲得以下資料:
INSERT INTO public.writer ("firstName", "surName", books) VALUES ('William', 'Shakespeare', '[{"name": "Hamlet"}, {"name": "Romeo and Juliet"}]');
INSERT INTO public.writer ("firstName", "surName", books) VALUES ('Agatha', 'Christie', '[{"name": "Hercule Poirot"}, {"name": "Miss Marple"}]');
是否可以像 PowerBI expand 一樣將 JSON 陣列擴展為 2 列并獲得以下結果?
| 名 | 姓 | 書名 |
|---|---|---|
| 威廉 | 莎士比亞 | 村莊 |
| 威廉 | 莎士比亞 | 朱麗葉 |
| 阿加莎 | 克里斯蒂 | 赫爾克里·波洛 |
| 阿加莎 | 克里斯蒂 | 馬普爾小姐 |
代替
| 名 | 姓 | 圖書 |
|---|---|---|
| 威廉 | 莎士比亞 | [{“名稱”:“哈姆雷特”},{“名稱”:“羅密歐與朱麗葉”}] |
| 阿加莎 | 克里斯蒂 | [{"name": "Hercule Poirot"}, {"name": "Miss Marple"}] |
示例資料庫:http ://sqlfiddle.com/#!17/87ca94/2
uj5u.com熱心網友回復:
您可以使用jsonb_array_elements()每個陣列元素獲取一行:
select w."firstName", w."surName", b.book ->> 'name' as book_name
from writer w
cross join jsonb_array_elements(books) as b(book)
在線示例
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/418804.html
標籤:
