我有两个表:员工表: EID,Name,Age ...
工资表: EID,Month,Salary ...每个月发工资后 都会相应在 工资表中插入一条记录,用于记录当月的工资信息现在我想找到在工资表中没有工资信息记录的所有员工, 请问这个查询语句要怎么写? 例如:11月份还没发工资的员工
select * from 员工表 where EID not in (select EID from 工资表 where month=11)但是执行的效率非常慢,半小时还没出结果, 请问有更好的办法吗?
工资表: EID,Month,Salary ...每个月发工资后 都会相应在 工资表中插入一条记录,用于记录当月的工资信息现在我想找到在工资表中没有工资信息记录的所有员工, 请问这个查询语句要怎么写? 例如:11月份还没发工资的员工
select * from 员工表 where EID not in (select EID from 工资表 where month=11)但是执行的效率非常慢,半小时还没出结果, 请问有更好的办法吗?
SELECT *
FROM 员工表 T1
WHERE NOT EXISTS (SELECT 1
FROM 工资表 T2
WHERE T1.EID = T2.EID
AND T2.MONTH = 11);
(select 1 from 工资表 t2 where month=11 and t1.eid=t2.eid) 语句就只能改成这样了...再考虑考虑索引方面的问题...
from 员工表 A, 工资表 B
where A.eid = b.eid(+)
and B.month = 11
and B.eid is null
--first way:
SELECT *
FROM 员工表 T1
WHERE NOT EXISTS (SELECT 1
FROM 工资表 T2
WHERE T1.EID = T2.EID
AND T2.MONTH = 11);
--second way:
SELECT EID
FROM 员工表 T1
minus(SELECT EID
FROM 工资表 T2
WHERE T2.MONTH = 11);
如果數據量小的話,exist影響不太