[英]Postgresql - problem using json function in nested queries - hstore
我有一個帶有 hstore 類型字段 order_detail 的表訂單,它保存 json 數據。
現在我想查詢我的 json 數據的內部對象。 因為查詢有點復雜我試圖在更簡單的情況下告訴我的問題。
我已經測試了這 4 個子查詢:
獲取原始保存的json:
select order_detail::json as original from orders;
此查詢成功返回 json 格式的數據。
在 order_details 中獲取內部 object 'transaction':
select order_detail::json as original, (order_detail -> 'transaction')::json as transaction from order_details;
此查詢也可以成功運行。
獲取該交易的 id:
select order_detail::json as original, (order_detail -> 'transaction')::json as transaction, ((order_detail -> 'transaction')::json -> 'id')::text as id from order_details;
以上也成功運行並返回原始json,事務和事務內的id。
Select 根據查詢 3 的結果得到結果之一:
select original from (select order_detail::json as original, (order_detail -> 'transaction')::json as transaction, ((order_detail -> 'transaction')::json -> 'id')::text as id from order_details) s where transaction is null and id is null;
此查詢將引發異常:異常表示:
[22P02] 錯誤有一個令牌 '=' 無效**
為什么這個異常只發生在第4 個查詢中? 誰可以幫我這個事?
最后我發現了問題。 當您想要在 hstore 中存儲 json 這樣的字段時,如果您使用簡單的查詢,您可以使用以下內容:
order_detail -> 'trasaction'
這將毫無問題地返回 order_detail 字段中散列存儲數據的事務部分。
但是如果你想在嵌套查詢中使用這樣的東西,你必須明確聲明該字段是 json。 所以你必須使用這樣的東西(在內部查詢的所有部分):
order_detail::json -> 'transaction'
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.