首页 > 解决方案 > Postgres LEFT JOIN 作为 json 对象属性

问题描述

我们有两张表:

book: id | title| author_id
authors: id | name

如何使用“作者”别名将一对一关系的作者加入到对象书的属性中:

{
  id
  title
  author_id
  author: {id, name}
}

当前查询结果为:

 {
      id
      title
      author_id
      a_id
      name
 }

查询示例

SELECT b.id, b.title, a.id as a_id, a.name
FROM books b  
LEFT JOIN author a ON a.id = b.author_id
WHERE b.id=1

标签: postgresql

解决方案


您可以使用字符串函数在一列中组合多个值:

SELECT b.id, title, author_id, format('{%s, %s}', a.id, a.name) AS author
FROM books b
LEFT JOIN author a ON a.id = b.author_id
WHERE b.id = 1

我怀疑您实际上是在寻找 JSON 格式:

SELECT b.id, title, author_id, json_build_object('id', a.id, 'name', a.name) AS author
FROM books b
LEFT JOIN author a ON a.id = b.author_id
WHERE b.id = 13

在线演示


推荐阅读