[英]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.