mysql可以不用子查询吗_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.如果不存在零条目,则总和将与计数相同.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值