在嵌套查询中使用 json 函数的 Postgreproblem - hstore.



我有一个表订单,其中包含一个 hstore 类型的字段order_detail,用于保存 json 数据。

现在我想查询我的 json 数据的内部对象。 因为查询有点复杂 我试图在更简单的情况下讲述我的问题。

我已经测试了这 4 个子查询:

  1. 获取原始保存的 json:

    select order_detail::json as original
    from orders;
    

    此查询成功返回 json 格式的数据。

  2. 获取order_details内部对象"事务":

    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. 根据查询 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'

最新更新