繁体   English   中英

在 postgresql 中将多个 sql 查询合并为一个 sql 查询

[英]Combine multiple sql queries into a single sql query in postgresql

我的主页有 3 个不同的 PostgreSQL 查询getUsersgetCompaniesgetEvents 我想为此创建一个查询。

我的 3 个简化查询:

getUsers = SELECT * FROM users;
getCompanies = SELECT * FROM companies;
getEvents = SELECT * FROM events; 

我想通过此查询获取一组对象。 到目前为止我尝试了什么:

SELECT
  coalesce(json_agg(users), '[]'::json) as users,
  coalesce(json_agg(companies), '[]'::json) as companies,
  coalesce(json_agg(events), '[]'::json) as events
    FROM
    (
     SELECT
       *
     FROM
       users
    ) AS users,
    (
      SELECT
       *
     FROM
       companies
    ) AS companies,
    (
    SELECT
      *
    FROM
      events
     ) AS events;

对于单个查询,这工作正常:

SELECT
  coalesce(json_agg(companies), '[]'::json) as companies
FROM
  (SELECT
    *
   FROM
    companies
    ) as companies

Output 用于此单个查询:

companies [
  {
    name: 'test company',
    url: 'https://www.example.com/test-company',
  },
  {
    name: 'test agency',
    url: 'https://www.example.com/test-agency',
  }
]

结果应该是:

users: [{...},{...}], 
companies: [{...},{...}], 
events: [{...},{...}]

尝试这个:

SELECT
  coalesce(json_agg(companies), '[]'::json) as companies
FROM
  (SELECT
    *
   FROM
    companies
    ) as companies

UNION
SELECT 
coalesce(json_agg(users), '[]'::json) as users 
FROM 
   (
     SELECT
       *
     FROM
       users
    ) AS users
UNION
SELECT 
coalesce(json_agg(events), '[]'::json) as events 
FROM 
   (
    SELECT
      *
    FROM
      events
     ) AS eventsl

经过一番努力后我的解决方案。 感谢 nikhil sugandh 让我走上了正确的道路!

SELECT
 (jsonb_agg(companies)) as result

FROM
  (SELECT
    *
   FROM
    companies
    ) as companies

UNION
SELECT 
(jsonb_agg(users)) as users  
FROM 
   (
     SELECT
       *
     FROM
       users
    ) AS users
UNION
SELECT 
(jsonb_agg(events)) as events
FROM 
   (
    SELECT
      *
    FROM
      events
     ) AS events

这里是 DB Fiddle 的链接

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM