sql使用sum进行多个左连接

sql使用sum进行多个左连接,sql,Sql,我有三张桌子如下。我需要做的是在左键将第一个表连接到第二个表和第二个表连接到第三个表之后创建一个summary 我使用的代码最终导致笛卡尔连接。我创建第一个表(person)的查询非常复杂,而且资源密集,而表2(购物清单)的数据量非常大,因此使用嵌套查询并不理想。下面是我正在使用的代码和预期的输出(图1)以及我得到的结果(图2) 选择 a、 身份证, a、 名字, 总成本(b.成本)总成本, 总额(c.折扣金额)总折扣 从…起 一个人,, 左加入a.id=b.id上的购物列表b b项目的左

我有三张桌子如下。我需要做的是在左键将第一个表连接到第二个表和第二个表连接到第三个表之后创建一个summary

我使用的代码最终导致笛卡尔连接。我创建第一个表(person)的查询非常复杂,而且资源密集,而表2(购物清单)的数据量非常大,因此使用嵌套查询并不理想。下面是我正在使用的代码和预期的输出(图1)以及我得到的结果(图2)

选择
a、 身份证,
a、 名字,
总成本(b.成本)总成本,
总额(c.折扣金额)总折扣
从…起
一个人,,
左加入a.id=b.id上的购物列表b
b项目的左加入折扣c=c项目
分组
a、 身份证,
a、 名字

我已经看了下面的链接,但我希望有一个解决方案,可以更好地考虑到我的数据集的大小


提前感谢您的帮助

您有多行折扣,请预先汇总:

select p.id, p.name, coalesce(sl.cost, 0) as cost,
       coalesce(d.discount_amount, 0) as discount_amount
from person p left join
     shopping_list sl
     on sl.id = p.id left join
     (select d.item, sum(discount_amount) as discount_amount
      from discount
      group by d.item
     ) d
     on sl.item = d.item
group by p.id, p.name;
查询的问题是,多行
折扣
最终与
购物列表
的行相乘,从而导致总数不准确

请注意,在此查询中,表别名是表名的缩写。这是一种最佳实践,它使遵循查询逻辑变得非常容易