gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 07:38:35 25 4
gpt4 key购买 nike

我有一个具有以下模式的表

(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 的条目,在这种情况下不应检索该行。

问题是我想在不使用任何子查询和连接的情况下检索此信息,因为它会产生性能问题,因为该表将包含数百万个条目。

最佳答案

应使用 Min 函数过滤掉所有条目为 0 的员工。还应使用 max 函数将条目限制为不高于 1。

SELECT employeeID, MIN(IsSelfAccessToDepartment) FROM test2 GROUP BY employeeID
HAVING MIN(isSelfAccessToDepartment) = 1;

最后:

  • 不需要计数,因为这不是 OP 要求的要求
  • 代码 AND MAX(isSelfAccessToDepartment) = 1 如果 IsSelfAccessToDepartment 不是一点点,则可以添加。但是,有点,两个可用值是零和一(感谢@Caius 在评论中指出这一点)。

此外,还有其他创造性的解决方案(但效率低下),例如:

SELECT employeeID FROM test2 GROUP BY employeeID
HAVING SUM(isSelfAccessToDepartment) = COUNT(isSelfAccessToDepartment);

这个假设 isSelfAccessToDepartment 可以是零或 1。如果不存在零条目,则总和将与计数相同。

关于mysql - 如何在不使用子查询的情况下使用 where 条件选择不同的记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45412053/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com