Sql 我能’;我不知道如何改进这个查询

Sql 我能’;我不知道如何改进这个查询,sql,oracle,Sql,Oracle,我有一张很大的桌子,里面有几百万条记录。我想在同一个字段上创建一个具有多个where条件的查询 我需要知道有多少员工有权进入A楼,但没有进入B楼。据推测,任何有权进入A楼的员工都应该有权进入B楼,所以我在寻找异常情况 到目前为止,我想到的最好的办法是: select employee_id from personnel where building = A minus select employee_id from personnel where building = B; 但我很确定一定有一

我有一张很大的桌子,里面有几百万条记录。我想在同一个字段上创建一个具有多个where条件的查询

我需要知道有多少员工有权进入A楼,但没有进入B楼。据推测,任何有权进入A楼的员工都应该有权进入B楼,所以我在寻找异常情况

到目前为止,我想到的最好的办法是:

select employee_id from personnel where building = A
minus
select employee_id from personnel where building = B;
但我很确定一定有一种更快更有效的方法来做到这一点。也许是某种子查询


提前感谢。

您可以尝试以下方法之一:

select employee
from personnel
where building in (A, B)
having max(building) = min(building) and min(building) = A;
或:


特别是,这可以使用
人员(建筑,员工)
人员(员工,建筑)

上的索引。您可以尝试以下操作之一:

select employee
from personnel
where building in (A, B)
having max(building) = min(building) and min(building) = A;
或:


特别是,这可以使用
人员(建筑,员工)
人员(员工,建筑)

分组索引。使用必须检查A但不检查B的分组。使用必须检查A但不检查B。