sql
  • ruby-on-rails
  • 2012-02-09 31 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'))" 
    
    相關問題