Postgres json别名

时间:2017-07-13 10:52:31

标签: sql json postgresql

我在PostgreSQL中编写SQL查询。我现在有:

SELECT T.order,
 (SELECT row_to_json(item) FROM (
    SELECT T.title, T.subtitle, T.text
     FROM table T
     WHERE T.id = 1
) AS item)
FROM table T
WHERE T.id = 1;

结果是:

order |               row_to_json                                                         

---------------+------------------------------------------------------
    2 | {"title":"AAA","subtitle":"aaaa","text":"aaaa"}

但我需要结果:

order |               row_to_json                                                         

---------------+------------------------------------------------------
    2 | {"item":{"title":"AAA","subtitle":"aaaa","text":"aaaa"}}

你能告诉我怎么能得到它吗?

1 个答案:

答案 0 :(得分:0)

您不需要子查询来获得此类结果,并且使用Postgres jsonb function jsonb_build_object您可以实现这样的目标:

-- Test data:
WITH    "table"( id, "order", title, subtitle, "text" ) AS (
            VALUES  (   1::int, 2::int, 'AAA'::text, 'aaaa'::text, 'aaaa'::text),
                    (   2::int, 3::int, 'BBB'::text, 'bbbb'::text, 'bbbb'::text)
        )
-- The query:
SELECT  "order",
        jsonb_build_object(
            'items',
            jsonb_build_object(
                'title', title,
                'subtitle', subtitle,
                'text', "text"
            )
        ) AS myjson
FROM    "table"
WHERE   id = 1;

-- Result:
 order |                             myjson
-------+-----------------------------------------------------------------
     2 | {"items": {"text": "aaaa", "title": "AAA", "subtitle": "aaaa"}}
(1 row)