繁体   English   中英

SQL中多个表的总和

[英]Sum of multiple tables in SQL

我认为我想做的事情相当简单,但我返回的数据差异很大。

select sum(cast(vi.qty - vi.unredeemed as bigint))
  from red.dbo.setup vc
  full join red.dbo.test bt
    on bt.batch_no = vc.batch_no
  join red.dbo.live vi
 where vi.date_issued between '2012-01-01' and '2012-01-01' 
   and vc.denom ='1' 
   and substring(vi.issue_id,3,1) = '4'

我想要做的是将 3 个表连接在一起,然后将连接结果的qty相加,然后减去未赎回的qty ,以便在一行中给出赎回的总数。

我尝试了对 sum 字段的各种修改,但返回的数字似乎很大,所以我认为它正在乘以它们。

我有一段时间没有使用连接了,我有点生疏了。

您尚未对要加入的第二个加入 (dbo.live) 提供任何条件。 另一件事是你提到的只有加入。 是全关节还是左关节或右关节。 因您的病情而异

您的问题是您遗漏了第二个JOINON子句

select SUM(CAST(vi.QTY -vi.unredeemed as bigint))
from red.dbo.setup vc
FULL Join red.dbo.test bt on bt.batch_no = vc.batch_no
JOIN red.dbo.live vi ON ?? -- something needs to be added here, like vi.someId =vc.someOtherId

where vi.date_issued between '2012-01-01' and '2012-01-01' and vc.denom ='1' and      SUBSTRING(vi.ISSUE_ID,3,1) ='4'

你是对的,你观察到的“乘法”效应是由于缺少 ON 子句导致的笛卡尔积 带有未指定 ON 子句的简单 JOIN 会导致CROSS JOIN

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM