我正在使用以下查询从mysql数据库中获取数据,但获取了错误的数据。我想显示1990〜2000年的release_year,但它显示了所有内容。
SELECT title,release_year
FROM FILMS
WHERE
release_year BETWEEN 1990 AND 2000
AND budget > 1000000000
AND language ='Spanish'
OR language = 'French';
我试图切换查询的顺序,但是它似乎不起作用,或者我尝试在release_year between 1990 AND 2000
上加上括号。
答案 0 :(得分:5)
尝试一下。
SELECT title,release_year
FROM FILMS WHERE release_year >= 1990
AND release_year <= 2000
AND budget > 1000000000
AND (language ='Spanish' OR language = 'French');
如有任何疑问,请在下面评论。
答案 1 :(得分:4)
您有一个逻辑上的先决条件问题。
这些是您的过滤条件:
release_year BETWEEN 1990 AND 2000
AND budget > 1000000000
AND language ='Spanish'
OR language = 'French'
在逻辑运算符中,OR
的优先级比AND
的低,因此在语法上等效于:
(
release_year BETWEEN 1990 AND 2000
AND budget > 1000000000
AND language ='Spanish'
)
OR language = 'French'
现在您可以看到,无论发行年份和预算如何,此表达式都将允许任何法国电影。
您可能想要:
release_year BETWEEN 1990 AND 2000
AND budget > 1000000000
AND ( language ='Spanish' OR language = 'French')
可以缩写为:
release_year BETWEEN 1990 AND 2000
AND budget > 1000000000
AND language IN ('Spanish', 'French')
答案 2 :(得分:2)
强制逻辑and
和or
优先总是一个好主意。
尝试:
SELECT title,release_year
FROM FILMS
WHERE release_year between 1990 AND 2000
AND budget > 1000000000
AND (language ='Spanish' OR language = 'French')
;
或
SELECT title,release_year
FROM FILMS
WHERE release_year between 1990 AND 2000
AND budget > 1000000000
AND language IN ('Spanish', 'French')
;
MySQL的最新版本对IN
进行了优化,使其性能优于等效的OR
条件集。
注意,我说“总是” 是因为,即使(a and b) or c
是您想要的逻辑,加上括号也会使您的意图对查看查询的下一个人清楚。