一个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语句漏掉了什么呢?
...全文
156 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

110,338

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

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

试试用AI创作助手写篇文章吧