繁体   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