【发布时间】:2013-02-12 05:22:15
【问题描述】:
我正在为客户处理一个项目,需要 3 个不同表格中 3 个不同列的总和,这些表格的状态为“已清除”。
这三个表是(例如):
PAYMENT1
ID | Amount | Status
1 | 200 | Cleared
PAYMENT2
ID | Amount | Status
1 | 100 | Cleared
PAYMENT3
ID | Amount | Status
1 | 300 | Cleared
我提出了以下代码,它基本上完成了我想要实现的目标,但是正在处理的值被乘以三(当从多个表中添加值时)。
SELECT SUM(CASE WHEN P1.`Status` = "Cleared" THEN P1.Amount ELSE 0 END)
+ SUM(CASE WHEN P2.`Status` = "Cleared" THEN P2.Amount ELSE 0 END)
+ SUM(CASE WHEN P3.`Status` = "Cleared" THEN P3.Amount ELSE 0 END) AS ClearedFunds
FROM PAYMENT1 As P1,
PAYMENT2 As P2,
PAYMENT3 As P3 ;
上面的查询将返回(从给出的示例中):1800 而不是预期的结果 600。
谁能找出问题所在?
【问题讨论】:
-
没有加入标准,因此您得到的是笛卡尔积。因此,结果是您预期的 3 倍。
-
感谢您的回复 OMG 小马。需要什么来解决这个问题?