查询不完全返回我想要的内容

时间:2012-02-09 17:04:09

标签: sql ruby-on-rails

我有点困惑为什么我的查询没有完全按照我的期望返回。这是我在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用于记录,这是我的第一个“复杂”查询。

帮助将不胜感激。

2 个答案:

答案 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'))"
相关问题