【问题标题】:When should I add TAB for subqueries in SQL?什么时候应该为 SQL 中的子查询添加 TAB?
【发布时间】:2020-12-16 20:53:09
【问题描述】:

我正在 SQLZOO 中练习 SQL,但无法理解问题 #5 的解决方案:https://sqlzoo.net/wiki/Window_functions

我从另一个用户@crowtherl 那里复制了表格和问题的描述

此问题使用表格“ge”,其中包含 2015 年和 2017 年英国的大选结果。“ge”包括字段 yr、firstName、lastName、constituency、party 和 votes。问题 #5 要求学习者展示 2017 年赢得每个爱丁堡选区的政党。本教程早些时候指出,爱丁堡选区的编号为 S14000021 到 S14000026。

解决方案:Problem #5 in SQLZOO's "Window functions" tutorial

特别是关于这段代码:

  select  constituency,party from 
(
SELECT constituency,party, votes , 
rank() OVER (PARTITION BY constituency order by votes desc) rn
  FROM ge
 WHERE constituency BETWEEN 'S14000021' AND 'S14000026'
   AND yr  = 2017
ORDER BY constituency,votes DESC
) TAB WHERE rn =1

如果我在外部查询中运行上面没有“TAB”的查询,我会得到:“错误: 每个派生表都必须有自己的别名。”

四处搜索后,我找不到一个很好的答案来解释为什么我需要添加“TAB”。这是 MariaDB 特有的吗?有人知道吗?谢谢。

【问题讨论】:

    标签: sql mariadb mariasql


    【解决方案1】:

    我相信这是标准 SQL。为了清楚起见,“TAB”是第二个 SELECT 产生的表的别名,即括号内的那个。它可以是您选择的任何名称(例如“T1”、“Extract”或“Whatever”),不必是“TAB”。

    【讨论】:

    • 谢谢,但为什么我必须使用别名才能运行此查询?子查询必须有别名吗?
    • 是的,子查询必须有一个别名。我猜这只是 SQL 语法的一部分。我记得我第一次遇到的时候也被这个迷惑了!
    猜你喜欢
    • 2017-06-08
    • 1970-01-01
    • 2020-11-02
    • 2011-09-11
    • 1970-01-01
    • 1970-01-01
    • 2022-12-18
    • 2011-06-23
    • 2018-10-03
    相关资源
    最近更新 更多