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

MySQL查询比较运算符异常:添加RSI过滤后忽略其他筛选规则

解决MySQL查询中OR条件忽略其他筛选规则的问题

嘿,我一眼就看出问题出在哪了——这是MySQL里逻辑运算符优先级的经典陷阱!

问题根源

你添加的OR条件没有用括号包裹,而MySQL中AND的优先级比OR高,导致你的查询被解析成了这样的逻辑:

(满足前面所有AND条件) OR (满足PRECIO.forex_pair_price_rsi <= '20.00')

也就是说,只要数据的RSI小于等于20,不管它符不符合时间、货币对、信号结果这些其他条件,都会被筛选出来,这就造成了“忽略其他规则”的假象。

修复后的查询语句

把RSI的两个条件用括号括起来,让它们作为一个整体和其他条件进行AND运算:

SELECT * 
FROM forex_pair_signals AS SENALES 
JOIN forex_pair_price AS PRECIO ON SENALES.forex_pair_price_id = PRECIO.forex_pair_price_id 
JOIN forex_pair AS PARES ON PRECIO.forex_pair_id = PARES.forex_pair_id 
WHERE PRECIO.forex_pair_price_time >= '2019-02-01 00:00' 
  AND PRECIO.forex_pair_price_time <= '2019-02-07 01:00' 
  AND TIME(PRECIO.forex_pair_price_time) BETWEEN '06:00' AND '13:00' 
  AND PARES.forex_pair_id = 13 
  AND SENALES.forex_pair_signals_result = 1 
  AND (PRECIO.forex_pair_price_rsi >= '80.00' OR PRECIO.forex_pair_price_rsi <= '20.00') -- 这里加括号
ORDER BY SENALES.forex_pair_signals_id DESC

额外小建议

如果forex_pair_price_rsi是数值类型(比如DECIMAL、FLOAT),建议去掉数值两边的单引号,写成80.00和20.00,避免MySQL做隐式类型转换,这样能提升查询性能,也更符合数据类型的规范。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 09:22:18