一道sql题 用效率最高的sql

来源:百度知道 编辑:UC知道 时间:2024/05/21 17:48:07
两个表: 职工个人资料(包含职工id、预计每个月加班时间及其他字段)表与职工工作审核表(包含职工id、本月实际加班时间及其他字段)

现在要查出本月加班时间超出预计加班时间的职工个人资料,并且要用效率最高的sql 请问如何写?

select * from 职工个人资料
where 职工id in
(
select a.职工id
from 职工个人资料 as a
inner join 职工工作审核表 as b
on
a.职工id =b.职工id
and
b.实际加班时间>a.预计每个月加班时间
and
b.月= 么个月
)

这个 In可以不要的啊 ,上面的只是为了好看...
select a.*
from 职工个人资料 as a
inner join 职工工作审核表 as b
on
a.职工id =b.职工id
and
b.实际加班时间>a.预计每个月加班时间
and
b.月= 么个月
这么写就可以了,简写了很多

select a.*

from 职工个人资料 a,职工工作审核表 b
where a.id = b.id
and (b.本月实际加班时间 - a.预计每个月加班时间) >0

select [个人资料].[职工ID]
from [个人资料] left join [职工工作审核]
on [个人资料].[ID]=[职工工作审核].[ID]
where [个人资料].[预计每个月加班时间]<[职工工作审核].[本月实际加班时间]

那要看什么数据库了
比如说in子查询在oracle会异常的慢,在db2中就很快

select a.* from 资料表 a 审核表 b where b.实际时间 > a.预计时间 and a.id = b.id