问题:
数据库具有以下关系: 类(类,类型,国家,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'
答案 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