一个oracle的sql语句问题
有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语句漏掉了什么呢?