所有sql都带有子查询,并且不存在

时间:2014-05-27 22:58:34

标签: mysql sql

我正在做一个SQL问题,问题是:

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

3个答案(#3错了):

  1. select country, class from Classes where country = ALL(select country from Classes where country='Russia')

  2. select country, class from classes where not exists (select country from classes where country='Russia') or country='Russia'

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

  4. 任何人都可以解释“所有例子是如何工作的”,我不完全理解这是如何涵盖上述所有案例的:只查找俄语课程,如果没有其他所有案例。

    anoyone也可以解释ans2和错误的ans3是如何不同的,我认为它可能与null值有关但我不太确定..对于sql来说是相当新的

1 个答案:

答案 0 :(得分:0)

all是对子查询中所有值的比较,我不认为你使用它的方式非常有用。

对于大于,小于等的数字比较,它会更有用。

来自MySQL网站: SELECT s1 FROM t1 WHERE s1 > ALL (SELECT s1 FROM t2);

这将从t1中选择所有来自t1的s1的s1大于全部的s1。

您的示例

你的例子:select country, class from Classes where country = ALL(select country from Classes where country='Russia')这个子查询只返回一堆“俄罗斯”,因为你只选择国家等于俄罗斯的国家。

但是,正如Oracle中所记载的那样(未在MySQL中记录),ALL将返回一个真实条件,如果没有值允许您从俄罗斯选择全部,除非没有俄罗斯行。