我很困惑为什么它不能
Select x.continent, x.name
From world x
Where x.name <= ALL (select y.name from world y where x.name=y.name)
ORDER BY name
任何人都可以向我解释为什么它必须是x.continent = y.continent而不是x.name = y.name?
答案 0 :(得分:4)
当您使用Access-Control-Allow-Methods: POST, PUT, GET, OPTIONS
时,如果两个实例具有相同的国家/地区名称,则您将x的国家/地区名称与y的国家/地区名称进行比较。这基本上只会让你回到全桌x。
您想要使用x.name=y.name
,因为您只想将x中的实例的国家/地区名称与y中的实例的国家/地区名称进行比较(如果它们共享同一个大陆)。
让我用一个例子逐步说明: 这里我们有一个表格世界,我填充了一些数据:
x.continent=y.continent
当您在子查询中没有WHERE子句的情况下执行此查询时:
world:
Select x.continent, x.name
From world x
ORDER BY name
continent name
Asia Afghanistan
Europe Albania
Africa Algeria
Europe Andorra
Africa Angola
SouthAmerica Bolivia
SouthAmerica Brazil
Europe Hungary
Asia Japan
Africa Nigeria
SouthAmerica Peru
Asia Taiwan
你得到了这个
Select x.continent, x.name
From world x
Where x.name <= ALL (select y.name from world y)
ORDER BY name
这是因为where子句过滤了除一个国家外的所有国家
continent name
Asia Afghanistan
,即按字母顺序排在阿富汗的国名。
但是由于我们希望获得每个大洲的第一个国家/地区,我们会将where x.name <= (Afghanistan,Taiwan,Japan,
Albania,Hungary,Algeria,Nigeria,Andorra,
Angola,Bolivia,Peru,Brazil)
添加到我们的子查询中
x.continent=y.continent
下面发生的事情是,现在我们只是将x中的实例的国家/地区名称与y中的实例的国家/地区名称进行比较,如果它们共享同一个大陆。因此,以亚洲大陆为例:
Japen因为过滤掉了
Select x.continent, x.name
From world x
Where x.name <= ALL (select y.name from world y where x.continent=y.continent)
ORDER BY name
是错误的,因为日本不低于或等于阿富汗(A出现在J之前)
台湾因为过滤掉了
Japan <= All(Afghanistan,Taiwan,Japan)
是错误的,因为台湾不低于或等于阿富汗。
阿富汗没有被过滤掉,因为
由于阿富汗与阿富汗相等,Taiwan <= All(Afghanistan,Taiwan,Japan)
是正确的
但是,如果您在子查询中使用Afghanistan <= All(Afghanistan,Taiwan,Japan)
,那么您实际上是将每个国家/地区与自身进行比较,并且它们都将包含在您的最终结果集中,因为所有国家/地区名称都等于其自己的国家/地区名称。
我希望这有帮助,欢迎来到Stack Overflow。如果此答案或任何其他答案解决了您的问题,请将其标记为已接受。“
答案 1 :(得分:0)
select A.continent, A.name
from
(Select x.continent, x.name, RANK() OVER(PARTITION BY x.continent ORDER BY x.name
asc)AS Rank
From world x
group by x.continent, x.name)A
where
Rank = 1
答案 2 :(得分:0)
这是正确的答案:
Select continent,name
from world x
Where x.name <= ALL(select y.name from world y
where x.continent=y.continent)
ORDER BY continent
答案 3 :(得分:0)
这很容易,因为min func将按字母顺序返回第一个单词。
SELECT continent, name FROM world x WHERE name = (SELECT min(name) FROM world y WHERE x.continent = y.continent );
答案 4 :(得分:0)
这也会产生正确的答案。
SELECT continent, name
FROM world a
WHERE name <= ALL(SELECT name FROM world b
WHERE a.continent = b.continent)
答案 5 :(得分:0)
我试过了,它也有效:
SELECT continent, MIN(name)
FROM world
GROUP BY continent
答案 6 :(得分:0)
这里有一个注意事项 - 要正确回答这个问题,ORDER BY 是不必要的,对于最简单的解决方案,您只需要:
SELECT continent, name
FROM world w1
WHERE w1.name <= ALL(SELECT name
FROM world w2
WHERE w1.continent=w2.continent)
答案 7 :(得分:0)
按字母顺序列出每个大陆和国家名称。
<块引用>选择大洲,名称 来自世界x 其中名称在(选择分钟(名称) 来自世界y 其中 x.Continent= y.continent)
答案 8 :(得分:0)
SELECT
continent, name
FROM
world x
WHERE
name <= ALL(SELECT name FROM world y WHERE x.continent=y.continent ORDER BY name )
ORDER BY continent
返回一个有序的国家名称列表,然后返回这个列表的第一个条目,最后按大洲排序外部选择查询。
答案 9 :(得分:-2)
SELECT continent, name
FROM world as x
WHERE name = ALL(SELECT min(name)
FROM world y
WHERE x.continent = y.continent);