SQL 连接查询(连接字段作为 json 对象)

SQL join query (joined field as a json object)

我正在使用 PostgreSQL,我正在使用 Nodejs 和 PG 包。我有这些表:

request_tbl:

 req_id |  customer_id  | details              
----+--------------------------------------
  1     |    1          | something
  

customers_tbl:

 cust_id |  full_name | age             
----+--------------------------------------
  1      |  tarik hh  | 23
    

我需要一个查询,在将其转换为 json 后提供此输出。

这是左联接,但我需要将联接的列作为对象。

  [
    {
       "req_id":"1" , 
       "details":"something" ,
       "customer":{
                    "cust_id":"1",
                    "full_name":"tarik hh"
                  }
    }
      
  ]

使用 postgresql 的内置 json_build_object 函数并创建您自己的函数,如下所示:

CREATE FUNCTION get_req_w_cust(
  req_id_in int, 
  out results json
) AS $$
BEGIN
  SELECT json_build_object(
    'req_id', request_tbl.req_id,
    'details', request_tbl.details,
    'customer', json_build_object(
      'cust_id', customers_tbl.cust_id,
      'full_name', customers_tbl.full_name
    )
  ) INTO results
  FROM request_tbl, customers_tbl
    WHERE request_tbl.customer_id = customers_tbl.cust_id
    AND request_tbl.req_id = req_id_in
END
$$ language plpgsql;

然后您可以使用

从您的代码访问它
let {rows: [{results}] = await pg.query('select get_req_w_cust() AS results',[id]);

或者只使用查询而不将其包装在函数中。