gpt4 book ai didi

arrays - POSTGRESQL 多选,多行数组可能吗?

转载 作者:行者123 更新时间:2023-11-29 12:19:24 26 4
gpt4 key购买 nike

假设我正在做一些简单的事情,比如从两个表中选择所有内容:

"SELECT * FROM table1; SELECT * FROM table2;"

它将返回一个如下所示的结果对象:

{rows:[{},{},{} etc...]}

其中行对象数组是 table1 中的每一行,后面是 table2 中的每一行。

我想要的是能够将上面的 SELECT 语句组合成一个数据库查询,但让它返回如下内容:

[
{table1rows:[{},{},{}]}
,{table2rows:[{},{},{}]}
]

... 这样我就可以避免对数据库进行多次查询,然后将每个查询的结果对象捏造成一个自定义对象,我像穴居人一样从数据库查询引用到数据库查询。因此,我可以在客户端处理一个查询,一个干净的结果集,知道哪些行数组来自哪个表。

你可以为此使用 AS 吗?我如何通过一个查询实现这一目标?

最佳答案

你基本上需要:
- 使用 combine multiple queries UNION ALL;
- 使用 json_build_object 构建 json 数组和 json_agg 函数;

示例 SELECT 可以是以下内容:

WITH table1(a1,b1) AS ( VALUES
('valA1','valB1')
), table2(a2,b2) AS ( VALUES
('valA2','valB2')
)
SELECT json_agg(each_table_rows.data) FROM (
SELECT json_build_object('table1rows',tbl1.*) AS data
FROM (
SELECT t1.* FROM table1 t1
) tbl1
UNION ALL
SELECT json_build_object('table2rows',tbl2.*)
FROM (
SELECT t2.* FROM table2 t2
) tbl2
) each_table_rows;

结果:

                                           json_agg                                           
----------------------------------------------------------------------------------------------
[{"table1rows" : {"a1":"valA1","b1":"valB1"}}, {"table2rows" : {"a2":"valA2","b2":"valB2"}}]
(1 row)

关于arrays - POSTGRESQL 多选,多行数组可能吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34693147/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com