簡體   English   中英

Postgresql - 在嵌套查詢中使用 json function 的問題 - hstore

[英]Postgresql - problem using json function in nested queries - hstore

我有一個帶有 hstore 類型字段 order_detail 的表訂單,它保存 json 數據。

現在我想查詢我的 json 數據的內部對象。 因為查詢有點復雜我試圖在更簡單的情況下告訴我的問題。

我已經測試了這 4 個子查詢:

  1. 獲取原始保存的json:

     select order_detail::json as original from orders;

    此查詢成功返回 json 格式的數據。

  2. 在 order_details 中獲取內部 object 'transaction':

     select order_detail::json as original, (order_detail -> 'transaction')::json as transaction from order_details;

    此查詢也可以成功運行。

  3. 獲取該交易的 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。

  4. 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM