一个oracle的sql语句问题

wolf30 2006-10-28 01:04:51
有3个表,

一个是科室表office,列为 科室名:office_name
一个是任务表task:列为 所属科室:owner_office,任务ID:id
一个是任务分配表task_assign:列为所属任务:task_id,分配比例:ratio,任务处理人:user(这列在查询中不用的)

我用
select owner_office,count(*) from task
left join (select task_id,sum(ratio) as ratio from task_assign group by task_id)table1 on task.id=table1.task_id
where ratio is null group by owner_office

得出 没有分配过,即 ratio is null 的那些任务在各科室的数量分组

结果为
北京设计室 5
科技园科 17
莲塘科 9
南京科 18
上海科 15
西安科 15

如果写成
select * from eda.base_office left join
(select owner_office,count(*) from task
left join (select task_id,sum(ratio) as ratio from task_assign group by task_id)table1 on task.id=table1.task_id
where ratio is null group by owner_office )table2 on eda.base_office.office_name=table2.owner_office
结果为
北京设计室 北京设计室 16
基础互连科 基础互连科 1
科技园科 科技园科 55
莲塘科 莲塘科 68
南京科 南京科 174
上海科 上海科 75
西安科 西安科 36
部门直属

统计出的各科室没有分配过的任务数量明显变大

我查过,如果使用
select owner_office,count(*) from task
left join (select task_id,sum(ratio) as ratio from task_assign group by task_id)table1 on task.id=table1.task_id group by owner_office
(得出 任务在各科室的数量分组)
那么结果就是:
北京设计室 16
基础互连科 1
科技园科 55
莲塘科 68
南京科 174
上海科 75
西安科 36

可见使用以下2个sql语句,得到的结果都一样
1.select * from eda.base_office left join
(select owner_office,count(*) from task
left join (select task_id,sum(ratio) as ratio from task_assign group by task_id)table1 on task.id=table1.task_id
where ratio is null group by owner_office )table2 on eda.base_office.office_name=table2.owner_office

2.select * from eda.base_office left join
(select owner_office,count(*) from task
left join (select task_id,sum(ratio) as ratio from task_assign group by task_id)table1 on task.id=table1.task_id
group by owner_office )table2 on eda.base_office.office_name=table2.owner_office

“where ratio is null”这个限制条件没有起到任何作用


另外这个情况只在我的oracle数据库中出现,在sql2000模拟建立类似的表后就没有出现此问题

我也知道有其它的sql写法能得到正确的结果,关键是为什么oracle会出现这样的现象,是我的sql语句漏掉了什么呢?
...全文
153 回复 打赏 收藏 举报
写回复
回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
发帖
C#

10.8w+

社区成员

.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
帖子事件
创建了帖子
2006-10-28 01:04
社区公告

让您成为最强悍的C#开发者