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

MySQL中如何基于另一张表的多组时间区间过滤目标表?查询报错解决方案求助

看起来你是想从camarinas表中找出所有data字段落在ort_ocas表任意一个时间区间(ort到ocas)内的记录对吧?咱们来一步步解决你的问题:

正确的查询语句

最直接高效的方式是使用JOIN关联两个表,让数据库直接匹配每个时间区间:

SELECT DISTINCT c.*
FROM camarinas c
JOIN ort_ocas oo 
  ON c.`data` BETWEEN oo.ort AND oo.ocas;

如果你的camarinas记录不会同时落在多个ort_ocas区间里,也可以去掉DISTINCT来提升查询速度。

为什么你的之前的语句会报错?
  • 第一条语句的问题:(select ort from ort_ocas)和(select ocas from ort_ocas)会返回多行结果,但BETWEEN运算符只能和单个值组合使用,数据库无法确定用哪一行的区间来做比较,所以抛出了Error Code: 1242. Subquery returns more than 1 row错误。
  • 第二条语句的问题:嵌套的子查询写法效率极低,尤其是当两张表数据量较大时,会导致查询耗时过长,超过了MySQL的连接超时阈值,最终触发Error Code: 2013. Lost connection to MySQL server during query错误。
优化建议

为了让这个查询跑得更快,建议给以下字段添加索引:

  • 给camarinas.data``字段加普通索引
  • 给ort_ocas.ort和ort_ocas.ocas字段加联合索引(或者各自加普通索引)

这样数据库可以快速定位符合条件的记录,避免全表扫描带来的性能问题。

内容的提问来源于stack exchange,提问作者Francisco J Garcia Corbeira

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.27 14:49:09