从JOIN条款

时间:2017-10-26 15:20:08

标签: mysql join

我在MySQL中有mycash表,其中包含以下数据:

mycash table

测试案例1:

当我运行以下查询时,

SELECT t.id, SUM(prev.cash) AS cash_sum FROM mycash t JOIN mycash prev ON (t.id > prev.id)

我明白了:

id | cash_sum
2  | 1303.00

总结所有行的cash值等于1302和 NOT 1303。

我更改ON条件中的比较运算符并获得以下结果:

测试案例2:

对于ON (t.id < prev.id),结果为:

id | cash_sum
1  | 2603.00

测试案例3:

对于ON (t.id >= prev.id),结果为:

id | cash_sum
1  | 2605.00

测试案例4:

对于ON (t.id <= prev.id),结果为:

id | cash_sum
1  | 3905.00

每个结果背后的计算是什么?逐步解释将最清楚他们。

2 个答案:

答案 0 :(得分:0)

结果是正确的。

enter image description here

200 + 200 + 200 + 301 + 301 + 101 = 1303

答案 1 :(得分:0)

是的,我得到了自己的答案。这很简单。

对于ON条件下的任何比较运算符,我们必须将table t中的每一行与table prev中的所有其他行进行比较。在任何情况下,查询都将输出所有行中所有cash值的总和(返回的总行数 NOT 最多为4)。

让我解释测试用例1

SELECT t.id, SUM(prev.cash) AS cash_sum FROM mycash t JOIN mycash prev ON (t.id > prev.id)

我们必须从table prev中选择那些id个数字少于id中的table t的行。

从第一个表格,即table t,当id数字为1时,我们从第二个表格中得不到相应的行,即table prev。当第一个表中的id为2时,我们从第二个表中得到id 1(现金= 200)。如果第一张表中的id为3,则第二张表中有1和2(分别为现金= 200和301)。当id从第一个表开始为4时,我们有id s 1,2,3(现金= 200,301,101)。因此,在添加所有cash值后,cash_sum变为200 + 200 + 301 + 200 + 301 + 101 = 1303。

其他测试用例可以用类似的方式解释。