Postgres V13
試圖了解如何在 PS(簡單表)中生成 Json 基礎關系資料,我正在撰寫一個工具,該工具生成基于關系資料生成 Json 的 SQL,用戶提供映射規則 - 將每個 Json 欄位映射到 table.field 和該工具構建以所需 json 格式提供資料的 SQL。
例如,對于我需要在 Ps 上創建的非常相似的 json,在 Oracle DB(Oracle 版本 >12.2)上我通過運行獲得它:
SELECT JSON_OBJECT ('FIRST_NAME' VALUE TO_CHAR(CUSTOMER.FIRST_NAME),
'concatDeails' VALUE JSON_OBJECT ('conctant_name' VALUE TO_CHAR(CUSTOMER.FIRST_NAME) || TO_CHAR(CUSTOMER.LAST_NAME)),
'Payments' VALUE (SELECT JSON_ARRAYAGG ( JSON_OBJECT ('payment_id' VALUE PAYMENT.payment_id,
'amount' VALUE payment.amount
)
RETURNING VARCHAR2(32000) )
FROM PAYMENT WHERE PAYMENT.CUSTOMER_ID = CUSTOMER.CUSTOMER_ID )format json ) JSON_OUT
FROM CUSTOMER
并且有一個-->客戶與付款表之間的許多關系,因此對于Postgres,我有3個表:客戶(address_id是uniq鍵)地址(address_id是pk)付款(客戶可以多次付款)
json 應如下所示:
{
"first_name": "Jared",
"last_name": "Ely",
"concatDeails":{ "conctant_name": "Jared Ely"},
"Address":{"city": "NY" ,"Zip": 123123},
"Payments":[{"payment_id": 1,"amount":100 , "credit": null }]
}
我知道如何創建每個塊,但由于某種原因,無法在單個查詢中獲取所有塊。
獲取 first_name 和 concatDeails:
select json_build_object('first_name' , customer.first_name ,'concatDeails' ,json_build_object('last_nam1e' , customer.last_name||customer.last_name))
from customer
地址字典:
select
json_build_object('address' ,json_build_object('city_id' , address.city_id, 'postal_code' ,address.postal_code) )
from address ;
付款清單物件:
select jsonb_build_array(json_build_object('payment_id' , payment.payment_id ,'amount' , payment.amount ,"credit" , payment.credit)) from payment ;
當我嘗試將它們組合成單個查詢時,失敗了:
elect json_build_object('first_name' , customer.first_name ,'concatDeails' ,json_build_object('last_nam1e' , customer.last_name||customer.last_name),
(select json_build_object('address' ,json_build_object('city_id' , address.city_id, 'postal_code' ,address.postal_code) )
from address where address.address_id=customer.address_id),
(select jsonb_build_array(json_build_object('payment_id' , payment.payment_id ,'amount' , payment.amount))
from payment where payment.customer_id=customer.customer_id)
)
from customer;
ERROR: more than one row returned by a subquery used as an expression
SQL state: 21000
實際上,即使我嘗試將地址和客戶結合起來,我也會收到錯誤:
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/399540.html
標籤:sql PostgreSQL的
