首页 > 解决方案 > 从两个表中获取数据并在一行中显示,且不带 where 条件的重复项

问题描述

我想从两个表中获取数据并将它们输出到一行中。输出将有两列“to”和“from”,条件为“from”将具有来自第二个表的数据,其中 type 为 true,“to”列将具有来自第二个表的数据,其中 type 为 false。第二个表中的 FK_ID 链接到第一个表上的 ID。请帮忙查询。

我试图处理内部连接,但联合无法使其工作。提前致谢 。

表格1

ID | PATH|
 1 | ABC |
 2 | EFG |

表 2

ID | FK_ID | NUMBER | TYPE
20 | 1     | 123    | TRUE  
21 | 1     | 456    | FALSE  
28 | 2     | 888    | FALSE  
29 | 2     | 939    | TRUE  

输出应该是:

ID |  PATH | TO  | FROM
1  |  ABC  | 456 | 123
2  |  EFG  | 888 | 939

标签: sqlpostgresql

解决方案


如果性能是一个问题,您可能会发现 alateral join更快:

SELECT t1.*, t2.*
FROM table1 t1 LEFT JOIN LATERAL
     (SELECT SUM(T2.NUMBER) FILTER (WHERE NOT t2.TYPE) as num_to,
             SUM(T2.NUMBER) FILTER (WHERE t2.TYPE) as num_from             
      FROM table2 t2
      WHERE t1.ID = t2.FK_ID
     ) t2
ORDER BY t1.ID;

这避免了外部GROUP BY和可能的排序(假设这ID是主键)。

它还假设这TYPE是一个 Postgres 布尔类型。WHERE如果不是,请对子句使用字符串比较。


推荐阅读