我有点困惑为什么我的查询没有完全按照我的期望返回。这是我在SQL中的查询。
"SELECT \"users\".* FROM \"users\" INNER JOIN \"alerts\" ON \"alerts\".\"user_id\" = \"users\".\"id\" WHERE (bus_route = 'The 06:30 To Wexford' AND stop = 'Camolin' AND first_alert = '5' OR second_alert = '5' OR third_alert = '5')"
这就是我在Rails中所拥有的:
Alert.where("bus_route = '#{b}' AND stop = '#{s}' AND first_alert = '#{t}' OR second_alert = '#{t}' OR third_alert = '#{t}'")
我的目标是找到一个通过bus_route的警报,停止通过,第一个,第二个或第三个警报可以等于通过的分钟数。
但是我的查询正在做的是返回警报,只要任何警报字段等于传递的参数且bus_route和stop不相等。
我是一个很大的SQL和Rails查询noob用于记录,这是我的第一个“复杂”查询。
帮助将不胜感激。
答案 0 :(得分:3)
在first_alert = '#{t}' OR second_alert = '#{t}' OR third_alert = '#{t}'
部分周围添加括号,或者优先级低于AND。
答案 1 :(得分:0)
您可以尝试将OR语句括在括号中
"SELECT \"users\".* FROM \"users\" INNER JOIN \"alerts\" ON \"alerts\".\"user_id\" = \"users\".\"id\" WHERE ((bus_route = 'The 06:30 To Wexford' AND stop = 'Camolin') AND (first_alert = '5' OR second_alert = '5' OR third_alert = '5'))"