【发布时间】:2013-04-30 13:32:05
【问题描述】:
您好,我是 SQL 初学者,但遇到了问题。
我有以下 5 个表:
分公司(名称、城市)、 员工(员工编号、姓名、分公司)、 客户(CustNo、姓名、EmpNo)、 AccountDetails(AccNo、CustNo)、 帐号(帐号、余额)
员工通过 Employee Branch 属性加入到单个 Branch。 客户通过 EmpNo 属性连接到单个 Employee。
每个客户可以有多个帐户,每个帐户可以有多个客户(因此允许共享帐户)-因此我创建了一个交集实体(AccountDetails)。
我想对每个分行的总余额求和 - 我得到的问题是我的总数是重复计算的,即由于许多客户可以共享一个帐户,我的代码将计算每个客户帐户,即使它指的是同一个 AccNo - 因此,AccNo 和随附的余额会反复计算,具体取决于共享帐户的客户数量,因此如果 2 个客户共享一个帐户,则余额将被计算两次。
select sum(a.balance), a.accno, b.name
from branch b, bankemployee e, customer c, accountdetails d, account a
where b.name = e.branch
and e.empno = c.empno
and c.custno = d.custno
and d.accno = a.accno
group by a.accno, b.name
我使用过 DISTINCT,例如d.accno IN(从 accountDetails 中选择不同的 accno)但无济于事,它仍然重复计算。
我在 Account 表中放置了一个 Branch 属性,但如果可能的话我不想这样做。
非常感谢任何帮助。
谢谢。
【问题讨论】:
-
你为什么要加入客户、账户明细和银行员工?您似乎没有使用他们的列。
-
而当多个客户共享一个帐户,而该帐户的员工在不同的分支机构,应该怎么办?您的数据模型存在一些问题。值得注意的是,客户直接附属于银行员工似乎很奇怪。
-
@Aushin 你能详细说明你的意思吗?谢谢
-
@GordonLinoff 我会说它的设计方式是客户必须在同一个分支机构才能拥有一个帐户,尽管没有指定。是的,将客户直接附加到银行员工而不是特定分行并没有多大意义,但遗憾的是,这不是我可以改变的,因为我被赋予了数据库的关系模式。感谢您的回复。