简化SQL内连接查询中的row_to_json写法:去除嵌套子查询
当然可以简化掉那层嵌套子查询!PostgreSQL的row_to_json()其实支持直接处理行数据,没必要多套一层子查询来包装字段。
给你几个更简洁的写法:
方法1:直接用行构造器配合row_to_json
SELECT t.id, row_to_json((p.id, p.name)) AS project FROM "Things" t INNER JOIN "Projects" p ON p.id = t.project_id WHERE t.id = ?
不过要注意,这种写法生成的JSON键默认是f1、f2,如果想要保留id、name作为键名,得给行构造器指定类型别名:
SELECT t.id, row_to_json(ROW(p.id, p.name)::(id integer, name text)) AS project FROM "Things" t INNER JOIN "Projects" p ON p.id = t.project_id WHERE t.id = ?
方法2:用json_build_object手动构造(可读性更强)
如果你希望代码更直观,直接用json_build_object来拼接键值对是个好选择,完全不需要子查询:
SELECT t.id, json_build_object('id', p.id, 'name', p.name) AS project FROM "Things" t INNER JOIN "Projects" p ON p.id = t.project_id WHERE t.id = ?
这几种写法都能实现原语句的功能,而且结构更清爽。其中json_build_object的方式最容易理解,推荐优先用这个~
内容的提问来源于stack exchange,提问作者Tyler
相关产品推荐
相关产品推荐

