我想將帶有連接的選擇的結果轉換為 json 物件。我的意思是這個查詢:
select
cm.*,
e.*,
u.*,
from
chat_messages cm,
events e,
users u
where
cm.event_id = e.id
and cm.user_id = u.id
應該輸出這個:
{
"id": 1,
"message": "whatever",
"time": "2021-12-02T00:21:10.571848",
"user": {
"id": 35,
"name": "John Smith"
},
"event": {
"id": 19,
"name": "Test event",
"time": "2021-09-22T00:00:00-03:00",
"local": "Planet Earth"
}
}
(還有比這些更多的欄位。我只是讓例子簡單)
我通過這種方式找到了解決方案:
select
json_build_object(
'id', cm.id,
'message', cm.message,
'time', cm.time,
'user', to_json(u.*),
'event', to_json(e.*)
)
from
chat_messages cm,
events e,
users u
where
cm.event_id = e.id
and cm.user_id = u.id
但我認為應該有更好的方法來做到這一點。想象一下 chat_messages 有更多的欄位。逐個欄位地描述會很冗長。我想要的是一種讓查詢在 json 中轉換子查詢的方法,而無需我逐個欄位地描述。任何人都知道更好的方法來做到這一點?
uj5u.com熱心網友回復:
根據Postgres 檔案,您可以使用該row_to_json函式將行傳輸到 JSON,然后將每個表行附加一個別名以供檢測row_to_json
with cte as (
select
cm.*,
e as event,
u as user
from
chat_messages cm,
events e,
users u
where
cm.event_id = e.id
and cm.user_id = u.id
)
select row_to_json(c) from cte c;
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/374316.html
標籤:sql json PostgreSQL的 加入
上一篇:R:“模糊匹配”和“之間”陳述句
