无法连接具有不同行数的表

Posted

技术标签:

【中文标题】无法连接具有不同行数的表【英文标题】:Unable to join tables with different number of rows 【发布时间】:2021-04-27 03:17:36 【问题描述】:

假设我们有 2 张桌子:

表 X:

A | B | C | D |
---------------
1  2    abc somedate
2  4    xyz somedate
3  5    abc somedate
4  7    xyz somedate

Y 表:

A | E | C | Z |
---------------
1  2    abc somedate
2  4    xyz somedate
3  5    abc somedate
4  7    xyz somedate

假设 A 和 C 是两个表的主键和外键。

现在我想通过检查 D 日期是否介于给定的开始日期和结束日期之间来对表 X 中 B 的值求和,并将此结果与表 Y 连接,该表应该通过检查 Z 是否介于给定开始和结束日期。

如何在单个查询中实现这一点?

我在两个表上尝试了单独的查询,它们都将返回一组不同的行。所以我不确定如何将两者结合起来并在 1 个查询中返回结果。

【问题讨论】:

你应该真正展示你想要的结果。某种小提琴也会有帮助。 "Join table X to table Y" 不是一个有意义的操作。您必须明确说明您加入的条件;否则默认是笛卡尔连接,它是完全有效的,但对于您要解决的特定业务问题,这种连接非常少见。任何试图在没有得到您的澄清的情况下回答您的问题的尝试都不太可能有任何帮助。 【参考方案1】:

不确定是否有很好的理解。

但据我了解,您希望使用两个不同结果的 SQL 查询。 它似乎不是 JOIN 而是 UNION。

让我提出以下建议:

(SELECT SUM(B) AS sumofb FROM X WHERE D BETWEEN StartDate AND EndDate)
UNION
(SELECT COUNT(E) AS countofe FROM Y WHERE Z BETWEEN StartDate AND EndDate);

【讨论】:

以上是关于无法连接具有不同行数的表的主要内容,如果未能解决你的问题,请参考以下文章

Python Pandas - 连接两个具有不同行数和列数的数据框

连接具有不同列数的两个表

在同一列上连接具有不同行的 2 个表

内连接2个具有相同列名的表

如何在没有重复数据的情况下对两个具有连接的表进行求和?

从 MySQL 中具有不同列的表的多个连接结果中删除重复项