2017-01-09 1 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; 

: I는 다음과 같이 여러 테이블에서 출력 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" 
      } 
     } 
}] 

가 어떤 언어의 배열