【问题标题】:SQL Syntax with AS and ORDER BY in nested queries嵌套查询中带有 AS 和 ORDER BY 的 SQL 语法
【发布时间】:2010-02-08 15:06:01
【问题描述】:

我有一个使用以下语法的查询:

select x.a as a, x.b as b, x.c as c
from
  (select distinct a from foo
     order by y) as x
  left join zzz....
  left join yyy...;

我现在想在外部 select 语句中添加一个 order by

将它附加到末尾 - 它不喜欢语法,并将其放在 as 之前显然是有效的语法,但会返回一个空结果集,当省略 order by 时肯定会返回结果。

有什么理论吗?

很抱歉变量名,但它们并不是很重要 - 我更关心的是 order by 的位置。

【问题讨论】:

  • 变量名无关紧要。但是,给我们一个完整的 SQL 语句有助于向我们解释您想要实现的目标。在使用 dot dot dot 来传达意义方面,Neville Shute 是唯一的大师。
  • (select distinct a from foo order by y) 为什么需要在这里订购?我没有看到这会以任何方式影响结果。
  • 如其他答案之一所述,您需要将 Y 作为子查询的一部分包含在内,以便按外部查询中的该字段进行排序...

标签: syntax syntax-error sql


【解决方案1】:

Order By 位于外部 Select 中的 Where 之后。如果没有“Where”,则将其放在联接中最后一个 On (X=X) 选择器之后。

【讨论】:

    【解决方案2】:

    您的第一个子查询真的是按 y 排序(选择中未包含的字段)吗?这一点使您的问题变得更加困难。您要排序的字段应包含在子查询中,这样您就可以在外部进行排序。

    select x.a as a, x.b as b, x.c as c
    from
      (select distinct a from foo) as x
      left join zzz....
      left join yyy...
    order by x.a
    

    如果您出于某种原因确实需要按 y 的顺序,您能否更好地解释您的问题,或者包括您试图开始工作的实际查询。

    【讨论】:

      【解决方案3】:

      不能放在分号之后,必须放在分号之前

      select x.a as a, x.b as b, x.c as c
      from
        (select distinct a from foo
           order by y) as x
        left join zzz....
        left join yyy...
      order by <column list>;
      

      【讨论】:

        猜你喜欢
        • 2013-12-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-02-24
        • 1970-01-01
        • 2019-01-21
        • 1970-01-01
        相关资源
        最近更新 更多