我们有一个表 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/