Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Postgresql-在嵌套查询中使用json函数的问题-hstore_Sql_Json_Postgresql - Fatal编程技术网

Postgresql-在嵌套查询中使用json函数的问题-hstore

Postgresql-在嵌套查询中使用json函数的问题-hstore,sql,json,postgresql,Sql,Json,Postgresql,我有一个表orders,其中包含hstore类型的字段order_详细信息,用于保存json数据 现在我想查询json数据的内部对象。因为这个查询有点复杂,所以我试图用更简单的场景来说明我的问题 我已经测试了以下4个子查询: 获取原始保存的json: select order_detail::json as original from orders; 此查询成功返回json格式的数据 获取订单\u详细信息中的内部对象“transaction”: select order_detail::j

我有一个表orders,其中包含hstore类型的字段order_详细信息,用于保存json数据

现在我想查询json数据的内部对象。因为这个查询有点复杂,所以我试图用更简单的场景来说明我的问题

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

  • 获取原始保存的json:

    select order_detail::json as original
    from orders;
    
    此查询成功返回json格式的数据

  • 获取订单\u详细信息中的内部对象“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

  • 根据查询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]错误有一个令牌“=”无效**

    为什么此异常仅出现在4th查询中?有人能帮我吗


  • 最后我发现了问题。当您希望在hstore中存储json字段时,如果使用简单查询,可以使用如下内容:

    order_detail -> 'trasaction'
    
    这将毫无问题地返回order_detail字段中散列存储数据的事务部分

    但是如果您想在嵌套查询中使用这样的东西,您必须明确声明字段是json。因此,您必须使用类似的内容(在内部查询的所有部分中):


    请在代码问题中给出一个--cut&paste&runnable代码,包括作为代码输入的最小代表性示例;期望和实际输出(包括逐字记录错误消息);标签和版本;清晰的说明和解释。尽可能少地给出代码,即显示为OK的代码,并通过显示为not OK的代码进行扩展。(调试基础。)用于包含DBMS和DDL(包括约束和索引)的SQL,并将其作为格式化为表的代码输入。暂停总体目标的工作,将代码切分为第一个表达式,没有给出您期望的内容并说出您期望的内容和原因。如果您使用
    hstore\u to\u json()
    而不是强制转换?“类型为hstore,可保存json数据”-这没有意义,它是hstore还是json。如果您需要json格式的数据,为什么这不是一个
    jsonb
    或至少是一个
    json
    列呢?谢谢您的回答@a_horse_,没有名字。实际上数据库不是我的。我只是想从中获取一些报告,尽管我不能使用其他数据类型。主要问题是:为什么使用json的嵌套查询能够成功工作(查询3),但当我想在嵌套查询中使用它的结果时,它会引发异常(查询4)。
    order_detail::json -> 'transaction'