我有一个包含以下架构的表
(Id(int PK),EmployeeId(int),DepartmentId(int),IsSelfAccessToDepartment(bit))
此表可以包含以下条目
(1,101,21,1)
(2,101,22,0)
(3,102,21,1)
(4,103,21,1)
(5,103,22,0)
我想只检索那些IsSelfAccessToDepartment = 1的员工ID,即如果同一员工Id有另一个条目,其中IsSelfAccessToDepartment = 0,在这种情况下不应检索此行.
问题是我想在不使用任何子查询和连接的情况下检索此信息,因为它会产生性能问题,因为此表将包含数百万个条目.
最佳答案 应使用最小功能过滤掉所有输入0的员工.
还应利用最大函数将条目限制为不高于1.
SELECT employeeID, MIN(IsSelfAccessToDepartment) FROM test2 GROUP BY employeeID
HAVING MIN(isSelfAccessToDepartment) = 1;
最后:
>计数不是必需的,因为这不是OP要求的要求
>如果IsSelfAccessToDepartment不是一点,可以添加代码AND MAX(isSelfAccessToDepartment)= 1.但是,由于它有点,两个可用值为零和一(感谢@Caius在评论中的这一点).
此外,还有其他创造性的解决方案(但效率低下),例如:
SELECT employeeID FROM test2 GROUP BY employeeID
HAVING SUM(isSelfAccessToDepartment) = COUNT(isSelfAccessToDepartment);
这假设isSelfAccessToDepartment可以是零或1.如果不存在零条目,则总和将与计数相同.