表1:
| id | data |
| 1 | foo |
| 2 | bar |
表2:
| id | related_to | data |
| 1 | 1 | ding |
| 2 | 1 | dong |
有一种方法编写查询以返回这样的数据:
[
{
id: 1,
data: foo,
related_stuff: [
{
id: 1,
data: ding
},
{
id: 2,
data: dong
}
]
},
{
id: 2,
data: bar,
related_stuff: []
}
]
contregate功能将单个条目组合到一个汇总列表中,主要是字符串返回,但是我只希望整个数据集作为一个对象(我主要与JS一起使用,但是数据库必将无关紧要的语言在此处无关紧要。 )示例:
SELECT t1.id as id, t1.data as data, COUNT(t2.id) as amount
FROM t1
LEFT JOIN t2 ON t1.id = t2.related_to
GROUP BY t1.id
我会认为与此类似的事情:
SELECT t1.id as id,
t1.data as data,
SELECT * FROM t2
WHERE t2.related_to = t1.id
as related_stuff
FROM t1
但是我遇到了一个错误,该错误最多必须具有1列。 现在,我们的代码简单地查询表1的条目,然后对表1返回的每个条目进行查询,但我觉得应该有一种编写单个SQL查询的方法,该查询在一个查询中返回完整。
实际上,它会根据DBMS。
对于您可以尝试以这种方式使用postgres
,但这与
SELECT
t1.id,
t1.data,
COALESCE(json_agg(
json_build_object('id', t2.id, 'data', t2.data)
) FILTER (WHERE t2.id IS NOT NULL), '[]') AS related_stuff
FROM table1 t1
LEFT JOIN table2 t2 ON t1.id = t2.related_to
GROUP BY t1.id, t1.data;
不起作用,它具有称为
sqlite
的东西。