2017-01-09 48 views
1

我正在使用内部连接来连接3个表,所有者,存储和计算机。 我试图从多个表中查看输出JSON是这样的:格式JSON Postgresql

SELECT ow.*, st.*, ma.* 
FROM owner ow 
    INNER JOIN st.store ON ow.OwnerId = st.OwnerId 
    INNER JOIN machine ma ON ma.StoreId = st.StoreId; 

我想JSON格式是这样的:

{ 
    "OwnerId": "1d2dd", 
    "Name": "name test", 
    "Store":[{ 
     "StoreId": "s3ss5", 
     "Name": "Store1", 
     "Code": "bla", 
     "Machine":[{ 
      "MachineId": "axpeo", 
      "Name": "Machine1", 
      "Type": "type1" 
      }] 
     }, 
     { 
     "StoreId": "ddf22", 
     "Name": "Store2", 
     "Code": "ble", 
     "Machine":[{ 
      "MachineId": "weds", 
      "Name": "Machine2", 
      "Type": "type2" 
      }, 
      { 
      "MachineId": "axdso", 
      "Name": "Machine3", 
      "Type": "type3" 
      }] 
     }] 
} 

但JSON没有格式化,这样 返回我使用PostgreSQL的。

+0

? –

+1

普通的SQL select语句永远不会返回JSON,请查看Postgres中可用的JSON函数:https://www.postgresql.org/docs/current/static/functions-json.html –

回答

0

要做到这一点,最简单的(也许唯一明智的)方法是在表级别构建从个人记录JSON子文档,然后才分层加入他们:

SELECT json_build_object('OwnerId', ownerid, 
         'Name', name, 
         'Store', stores) 
FROM owner 
JOIN (
    SELECT ownerid, 
      json_agg(
       json_build_object('StoreId', storeid, 
           'Name', name, 
           'Code', code, 
           'Machine', machines)) AS stores 
    FROM store 
    JOIN (
     SELECT storeid, 
       json_agg(
        json_build_object('MachineId', machineid, 
            'Name', name, 
            'Type', type)) AS machines 
     FROM machine 
     GROUP BY storeid) m USING (storeid) 
    GROUP BY ownerid) s USING (ownerid); 
0

输出是不正是我想要的,但它是更好的... ...这是输出

[{ 
    "OwnerId": "1d2dd", 
    "Name": "name test", 
    "Store":{ 
     "StoreId": "s3ss5", 
     "Name": "Store1", 
     "Code": "bla", 
     "Machine":{ 
      "MachineId": "axpeo", 
      "Name": "Machine1", 
      "Type": "type1" 
      } 
     } 
}, 
{ 
    "OwnerId": "1d2dd", 
    "Name": "name test", 
    "Store":{ 
     "StoreId": "ddf22", 
     "Name": "Store2", 
     "Code": "ble", 
     "Machine":{ 
      "MachineId": "weds", 
      "Name": "Machine2", 
      "Type": "type2" 
      } 
     } 

}, 
{ 
    "OwnerId": "1d2dd", 
    "Name": "name test", 
    "Store":{ 
     "StoreId": "ddf22", 
     "Name": "Store2", 
     "Code": "ble", 
     "Machine":{ 
      "MachineId": "axdso", 
      "Name": "Machine3", 
      "Type": "type3" 
      } 
     } 
}] 

它不会从同店加盟机器但像什么语言数组