mysql – 如何在不使用子查询的情况下选择具有条件的不同记录

我有一个包含以下架构的表

(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.如果不存在零条目,则总和将与计数相同.

点赞