如何从一个与其他表至少具有一种关联的表中列出记录?

时间:2020-03-30 05:52:35

标签: postgresql

有三个表:

  1. 作者
  2. parent_books
  3. 个人书籍

parentbooks和personalbooks都有一个名为-b的列,其中包含一组作者ID。

我需要获取在parent_books或individual_books中有条目的作者列表,以及每个作者的parent_books和individual_books计数。

author.id,author.name,pcount和icount

我尝试了此查询

authors

pcount和icount被覆盖,请帮忙吗?

1 个答案:

答案 0 :(得分:2)

首先,让我指出在这里使用数组是不好的数据库设计。您应该使用表格而不是数组来建立书籍和作者之间的关系。

也就是说,您可以使用外部查询来聚合值:

SELECT id, name,
       sum(pcount) AS pcount,
       sum(icount) AS icount
FROM (SELECT a.id, a.name,
             count(pb.id) as pcount,
             BIGINT '0' AS icount
      FROM authors AS a
         INNER JOIN parent_books pb
            ON pb.authors::UUID[] @> ARRAY[a.id]
      GROUP BY a.id
      UNION ALL  
      SELECT a.id, a.name,
             BIGINT '0' AS pcount,
             count(ib.id) AS icount
      FROM authors AS a
         INNER JOIN individual_books ib
            ON ib.authors::UUID[] @> ARRAY[a.id]
      GROUP BY a.id) AS q
GROUP BY id, name;