我使用以下查询从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
。
您有一个逻辑优先级问题。
这些是您的过滤条件:
release_year BETWEEN 1990 AND 2000
AND budget > 1000000000
AND language ='Spanish'
OR language = 'French'
在逻辑运算符中,qazxsw poi的优先级低于qazxsw poi,因此这在语法上等同于:
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')
优先级总是一个好主意。
尝试:
and
要么
or
MySQL的最新版本已对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')
;
条件集。
注意,我说“总是”因为即使IN
是你想要的逻辑,添加括号也会使你的意图清楚地显示给查看查询的下一个人。
试试这个..
OR
如果您有任何疑问,请在下面评论。