You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MySQL如何实现跨多行AND条件匹配筛选jobno

问题原因说明

你写的WHERE ((class = 1 AND type = 3) AND (class = 2 AND type = 3))无返回结果是必然的:单条数据行的class字段不可能同时等于1和2,这个条件本身存在逻辑矛盾,无法匹配到任何行。

更优实现方案

你目前用的子查询内连接方案可以满足需求,还有两种性能更优、写法更简洁的实现:

  1. 聚合分组方案(兼容性最好,几乎支持所有SQL版本)
SELECT jobno
FROM jobProps
WHERE (class = 1 AND type = 3) OR (class = 2 AND type = 3)
GROUP BY jobno
-- 要求同一个jobno同时命中两个不同的class条件
HAVING COUNT(DISTINCT class) = 2
ORDER BY jobno

如果你的表中同一个jobno + class + type不存在重复数据,可以去掉DISTINCT直接写COUNT(*) = 2,执行效率更高。如果后续需要增加同时满足的条件,只需要调整WHERE中的OR分支和HAVING后的计数数值即可。

  1. 交集方案(逻辑最直观,支持PostgreSQL、SQL Server、MySQL 8.0及以上版本)
SELECT jobno FROM jobProps WHERE class=1 AND type=3
INTERSECT
SELECT jobno FROM jobProps WHERE class=2 AND type=3
ORDER BY jobno

这个写法和你用内连接的逻辑完全一致,但代码更简洁,数据库优化器通常也能生成更高效的执行计划。

内容的提问来源于stack exchange,提问作者Barry Ralphs

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 04:06:03