sql - 从两个表中获取数据并在一行中显示,且不带 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
解决方案
如果性能是一个问题,您可能会发现 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
如果不是,请对子句使用字符串比较。
推荐阅读
- javascript - 使用 IFrame 在 jQuery 中传播事件
- php - 如何使用 PHPMailer 将远程文件附加到电子邮件
- html - Discord 播放不允许嵌入的嵌入视频,如何?
- php - 被邀请者在邀请者租户中:Azure AD 邀请终结点错误
- javascript - 如何更改 KeyboardTimePicker (material-ui-pickers) 中的图标?
- gradle - 在 Windows 上的 Exec 中使用多个双引号的 Gradle 问题
- java - 无法在 flatMap 中构建 ResponseEntity
- omnet++ - 我可以在 omnet++ 中创建两个具有相同 ID 的节点吗?
- r - 如何将值向量分配给使用 %in% 运算符选择的行
- sql - 识别NULL并分配位图