id name addr
--- ---- ----
1 n1 ad1
2 n2 ad2
...
我需要将数据移动到具有以下字段的新表中:
id data
--- ----
1 {'name': 'n1', 'addr': 'ad1'}
2 {'name': 'n2', 'addr': 'ad2'}
...
row_to_json
对我来说不是解决方案,因为SELECT t.id, row_to_json(t) as data FROM (select id, name, addr from myt) t
也将id
添加到了结果中。有没有办法在我的数据字段中选择我需要的字段(名称和地址)?#1 楼
Postgres 9.4+中的json_build_object()
有一个更好的选择:SELECT id, json_build_object('name', name, 'addr', addr) AS data
FROM myt;
,但Postgres 9.3中的
row_to_json()
还有一个更简单,更快的方法:SELECT id, row_to_json((SELECT d FROM (SELECT name, addr) d)) AS data
FROM myt;
db <>在这里拨弄
Postgres 9.6上的旧SQL拨弄。
相关答案:
选择json_agg中的列
以SQL中的JSON对象数组的形式返回(Postgres)
返回总行数和所选(汇总)数据
评论
这是一个更好的答案,小提琴有证据。
– MIguelele
18年8月20日在15:15
#2 楼
我从此链接找到了答案:select * from (
select id,
(
select row_to_json(d)
from (
select name, addr
from myt d
where d.id=s.id
) d
) as data
from myt s
)
评论
别忘了将自己的答案标记为正确(尽管:-(没问题)。我不认为您可以立即执行此操作,但将来可能会对遇到类似问题的人有所帮助。
–Vérace
2015年2月2日在23:02
除了外部查询中缺少表别名外,这比所需的更为复杂和昂贵。我用小提琴添加了另一个答案来演示。
–欧文·布兰德斯特(Erwin Brandstetter)
2015年2月3日,下午3:31
评论
我不确定答案是否正确。我两年前问过。那时我也回答了我的问题,但没有将其标记为正确。