不是示例,订单差异

时间:2014-05-28 02:29:19

标签: mysql sql

问题:

数据库具有以下关系: 类(类,类型,国家,numGuns,钻孔,位移)

获得所有船舶的俄罗斯班级。如果数据库中没有俄罗斯类,请获取数据库中的所有类。 结果集:国家/地区,班级


有谁能告诉我这两个陈述之间的区别,我不知道它们有什么不同。(第一个查询是错误的,第二个查询将是工作)

select distinct country, class from classes 
where country not in (select country from classes where country='Russia') 
or country='Russia'

VS

select distinct country, class 
from classes 
where 'Russia' 
not in (select country from classes) 
or country='Russia'

1 个答案:

答案 0 :(得分:0)

您的第一个查询与

相同
select distinct country, 
class 
from classes 
where country != 'Russia' or country='Russia'

因此,where country != 'Russia'将获取国家/地区不是russia的所有行。

or country='Russia'会将包含国家/地区的行提取为russia

这与说法基本相同,因为你提取所有行

select distinct country, 
class 
from classes 

您的第二个查询

select distinct country, class 
from classes 
where Russia 
not in (select country from classes) 
or country='Russia'

当您说where 'Russia' not in (select country from classes)时,它将无法获取任何内容,因为Russia不是列。所以基本上你要过滤掉所有行,但是

or country='Russia'将获取国家/地区值为russia的行。这就是为什么你得到你所谓的期望结果(实际上这是一种不正确的做法)。

第二个查询与说

相同
select distinct country, class 
from classes 
where country='Russia'

如果您想测试它,请尝试这个小提琴http://sqlfiddle.com/#!2/a606a/5