【发布时间】:2015-10-01 15:11:46
【问题描述】:
有 3 个表格,各列:
wc_dept:dept_id,dept_name
wc_doctor : dept_id,doc_id,doc_name,consult_fee
wc_patient: doc_id,consult_id,患者姓名
对于以下查询,我得到了不同的结果:
查询 1:
select dept_name,sum(consult_fee)
from wc_doctor do,wc_dept dp,wc_patient p
where
do.dept_cd=dp.dept_cd
AND
do.doc_id=p.doc_id
group by dept_name;
上述查询的输出是每个部门的金额与实际金额(即每个部门的咨询费总和)相比非常大。
查询 2:
select dept_name,sum(consult_fee)
from wc_doctor do,wc_dept dp
where
do.dept_cd=dp.dept_cd
group by dept_name;
查询 2 的输出给出了每个部门的确切咨询费总和。
为什么 query1 和 query2 有区别?查询1中的consult_id列表现如何?
【问题讨论】:
-
了解如何使用明确的
join语法。这将帮助您跟踪您的加入条件。 -
Aaron Bertrand 对此做了一些writting
-
您是否尝试从每个查询中删除 sum 和 group bys 并查看返回的行的差异?您在第一个查询中加入了一个额外的表,所以我希望在第一个查询中看到更多的行,因此总和更大。
-
鉴于您没有提供任何样本数据,这是我能看到的唯一结论。我猜一个给定的医生会看到多个病人!您要解决的实际需求是什么?我会说第一个查询比第二个查询具有更多的实际意义-我的意思是,为什么您需要知道每个医生每个部门的咨询费总和?了解每个部门看病的费用肯定更有意义吗?
-
我没有投反对票,但我猜有些人对问题的编写方式感到不满。请阅读How to ask 以获得一些建议。因此,当您未能提供一些数据样本时,这可能被认为是一个不完整的问题。
标签: sql oracle oracle11g oracle-sqldeveloper