sql - 从内连接简化 SQL row_to_json

标签 sql json postgresql

我们有一个表 Things,其中包含通过 thing.project_id 属于表 Projects 的实例。

当查询 Things 的实例时,我们将返回父 Project 记录的 json 表示形式作为该实例的值。

目前看起来像:

SELECT t.id,
(
  SELECT row_to_json(a.*)
  FROM (
    SELECT p.id, p.name
  ) AS a
) AS project
FROM "Things" t
INNER JOIN "Projects" p ON p.id = t.project_id
WHERE t.id = ?

这工作正常,但似乎可以简化。

有没有办法在保持清晰的同时消除对中间变量(本例中的a)的需要?

最佳答案

不确定您到底想要什么,但是:

SELECT t.id, to_jsonb(p) as project
FROM "Things" t
 JOIN "Projects" p ON p.id = t.project_id
WHERE t.id = ?

要从 project 表中排除列,您可以将 - 运算符与 jsonb 结合使用:

SELECT t.id, to_jsonb(p) - 'id' as project
FROM "Things" t
 JOIN "Projects" p ON p.id = t.project_id
WHERE t.id = ?

您可以通过这种方式删除多列:

SELECT t.id, to_jsonb(p) - array['id', 'some_column'] as project
FROM "Things" t
 JOIN "Projects" p ON p.id = t.project_id
WHERE t.id = ?

关于sql - 从内连接简化 SQL row_to_json,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49412666/

相关文章:

mysql - 关于sql中连接的一般查询

javascript - JSON/Javascript - 如何从文本文件检索数据并将其存储到数组中

SQL 错误 - 列不存在(在 SELECT 中)

node.js - 无法识别的数据类型 Sequelize Postgres

javascript - 即使占位符中没有要填充的数据,也会渲染模板

ruby - 为什么我不能运行 postgresql 服务器?

sql - 在同一个表中加入查询

mysql - 如何优化sql查询

针对日期范围的 SQL 连接?

json - 使用异步线程时, Realm 数据库大小变为 x100