sql
  • ruby-on-rails
  • 2012-02-09 30 views 0 likes 
    0

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

    帮助,将不胜感激谢谢。

    回答

    3

    围绕first_alert = '#{t}' OR second_alert = '#{t}' OR third_alert = '#{t}'部分添加括号,OR具有比AND更低的优先级。

    0

    你可以尝试封闭或声明的括号内

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