我正在尝试提供以字母“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
而不是 OR
。也许这就是问题所在,但我看到一篇文章说 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}')
参见: