【发布时间】:2017-07-30 23:55:44
【问题描述】:
我目前正在处理一个数据库项目,并且在加入表时遇到了一些问题。初始情况是:
四个表:
- 任务 t ~ 50000 条记录
- 项目 p ~ 1000 条记录
- workson w ~ 30000 条记录
- 员工 e ~ 10000 条记录
表 w 有一个类似“WORKLOAD”的属性,不幸的是 SUM(w.WORKLOAD) 的结果不是预期的:
SELECT
p.NAME,
SUM(w.WORKLOAD) AS "Total Workload",
COUNT(DISTINCT w.ESSN) AS "Total Employees",
COUNT(DISTINCT t.NAME) AS "Finished Tasks" --t.NAME is unique
from p
JOIN w ON(p.PNUMBER = w.PNO)
JOIN t ON(p.PNUMBER = t.PNO)
WHERE t.END_DATE is NOT NULL
GROUP BY p.PNUMBER, p.NAME
加入这些表后,SUM() 函数返回一个太大的值。我猜这是因为 SUM() 函数多次计算每个 w.WORKLOAD 值。
那么有没有像内部连接这样的连接操作可以在不使用子查询的情况下解决问题?
提前致谢:-)
【问题讨论】:
-
每张表的表结构是什么?
-
解决方法是在
join之前聚合。在您的情况下,您如何做到这一点尚不清楚。 -
如果显示 p.Name 的结果,为什么还要按 p.Number 分组?
-
表 p: pk=p.pnumber;表 w: pk=(e.ssn, p.pnumber);表 t:pk=(t.no, p.pnumber);
标签: sql oracle join oracle11g inner-join