2013-10-11 34 views
2

我想要做的是聲明顯示在1999,2000和2001年發佈的所有電影,它們運行了三個小時(實際的列在秒)。WHERE子句中AND/OR的混合導致意想不到的結果

輸出表顯示正確的年份,但它顯示title_type以外的其他內容,並且它在title_runtime_hrs中顯示少於三次(以及多於三次)的時間。

這是我的代碼:

select title_name, title_type, title_release_year, 
    (title_runtime/3600.0) as title_runtime_hrs 
from nf_titles 
where title_type = 'Movie' and 
    title_runtime > 3 and 
    title_release_year = '1999' or 
    title_release_year = '2000' or 
    title_release_year = '2001' 
order by title_release_year, title_runtime_hrs desc 
+0

我問你缺少括號[在評論](http://stackoverflow.com/questions/19182922/show-a-col這就是 - 現在在秒鐘內#評論28382698_19182922)到你以前的問題之一,以及如何解決(然後潛在的)問題的建議。當你已經有解決方案時,爲什麼你必須發佈這個問題? –

回答

5

或者做這種方式

select title_name, title_type, title_release_year, (title_runtime/3600.0) as title_runtime_hrs 
from nf_titles 
where title_type = 'Movie' and 
    title_runtime > 3 and 
    title_release_year in ('1999','2000','2001') 
order by title_release_year, title_runtime_hrs desc 
4

你需要用你的OR陳述中括號。否則,SQL Server將說:「好吧,這裏的2000年,我們已經達到了標準

select title_name, title_type, title_release_year, (title_runtime/3600.0) as title_runtime_hrs 
from nf_titles 
where title_type = 'Movie' and 
    title_runtime > 3 and 
    (title_release_year = '1999' or 
    title_release_year = '2000' or 
    title_release_year = '2001') 
order by title_release_year, title_runtime_hrs desc 
2

你可能需要在你的OR語句括號(這是因爲AND結合強於OR):

select title_name, title_type, title_release_year, (title_runtime/3600.0) as title_runtime_hrs 
from nf_titles 
where title_type = 'Movie' and 
    title_runtime > 3 and 
    (
     title_release_year = '1999' or 
     title_release_year = '2000' or 
     title_release_year = '2001' 
    ) 
order by title_release_year, title_runtime_hrs desc