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
相关产品推荐
相关产品推荐

