如何正确结合BETWEEN条件与多个LIKE表达式?SQL筛选异常解决
解决SQL筛选逻辑错误的问题
你的问题出在SQL逻辑运算符的优先级上:AND的优先级高于OR,所以原语句的实际执行逻辑是:筛选「标题以S开头的所有电影」,或者「标题以T开头且重置成本在15.99-20.99之间的电影」,这就导致重置成本低于15.99的S开头电影也被包含进来了。
修正方案
方案1:给标题条件加括号(所有SQL数据库通用)
把标题的两个LIKE条件用括号包裹,让它们作为一个整体,再和重置成本的条件用AND关联,确保两个条件同时满足:
SELECT title, length, replacement_cost FROM film WHERE (title LIKE 'S%' OR title LIKE 'T%') AND replacement_cost BETWEEN 15.99 AND 20.99;
方案2:用正则表达式简化标题判断(部分数据库支持)
如果你的数据库支持正则表达式(比如PostgreSQL、MySQL、SQLite等),可以用正则匹配以S或T开头的标题,代码更简洁:
- PostgreSQL版本:
SELECT title, length, replacement_cost FROM film WHERE title ~ '^[ST]' AND replacement_cost BETWEEN 15.99 AND 20.99;
- MySQL版本:
SELECT title, length, replacement_cost FROM film WHERE title REGEXP '^[ST]' AND replacement_cost BETWEEN 15.99 AND 20.99;
关于IN搭配LIKE的问题
IN确实无法和LIKE兼容,因为IN是用来匹配固定的精确值列表,而LIKE是模糊匹配模式,两者逻辑不匹配,所以这个思路行不通。
内容的提问来源于stack exchange,提问作者Nath123
相关产品推荐
相关产品推荐

