我正在尝试提供以字母“S”和“T”开头的电影标题,其重置成本为 15.99 至 20.99。
我尝试使用此代码,但它仍然返回一些低于 15.99 的数据,请帮助。
SELECT title,length,replacement_cost FROM film WHERE title LIKE 'S%' OR title LIKE 'T%' AND replacement_cost BETWEEN 15.99 AND 20.99
尝试寻找其他方法将 LIKE 与 IN 一起使用,或者也许这就是问题所在,但我看到一篇文章说 IN 不能与 LIKE 一起使用。
您当前的问题是运算符优先级。
AND
在 OR
之前绑定 - 正如已评论的那样。可以用括号固定
SELECT title, length, replacement_cost
FROM film
WHERE (title LIKE 'S%' OR title LIKE 'T%')
AND replacement_cost BETWEEN 15.99 AND 20.99
但是你可以简化。那么你就不需要
OR
,因此也不需要括号:
...
WHERE title LIKE ANY ('{S%, T%}')
虽然您只匹配前缀,但 运算符
^@
更好。需要 Postgres 11; Postgres 15 有了很大改进:
...
WHERE title ^@ ANY ('{S,T}')
参见: