首页 > 解决方案 > SQL 查询。加入右表作为左表内的嵌套对象

问题描述

通读文档后,我找不到任何关于如何进行这个简单查询的信息:有两个表:

    first one is "PACKAGES"
       {
          id: 1,
          name: 'package_1',
          sender_id: 1,
          type: 'shipping'
       }
    second one is "USERS"
       {
          id: 1,
          name: 'user_1'
       }

当我执行左、右连接或简单连接时,它只是将这两个表合并为一个。而 id, name 只是相互覆盖

我需要的是:

       {
          id: 1,
          name: 'package_1',
          sender_id: 1
          type: 'shipping',
          user: {             // second table as nested object
              id: 1,
              name: 'user_1'
          }
       }

我尝试了所有我能找到的东西,例如:

SELECT * FROM packages JOIN users AS user ON packages.sender_id=user.id;"

如何将右表作为左表内的对象?

标签: sqlpostgresqlpsql

解决方案


用于to_json将查询结果呈现为嵌套的 JSON 对象:

select to_json(res) from 
(
  select p.*, to_json(u) "user"
  from packages p 
  inner join users u 
  on p.sender_id = u.id
) res;

结果:

{
  "id": 1,
  "name": "package_1",
  "sender_id": 1,
  "type": "shipping",
  "user": {
    "id": 1,
    "name": "user_1"
  }
}

推荐阅读