选择SQL子查询以返回整个数据集作为单列

问题描述 投票:0回答:1
say我有一个条目表和第二个相关条目表:

表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

sql
1个回答
0
投票

,但这与

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
的东西。
	

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.