2013-10-11 31 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