【问题标题】:Clauses which are not allowed in individual UNION statements单个 UNION 语句中不允许的子句
【发布时间】:2013-03-16 11:24:47
【问题描述】:

我正在用 C# 和 Java 编写查询构建器,并且担心生成 UNION 语句。我知道 UNION 子句中的每个单独的语句都不能包含 ORDER BY 子句,而必须将其放在完整的 union 语句的末尾。还有其他我应该注意的条件吗?即通常适用于单个选择语句的条件,但是在放入 UNION 语句时会导致问题?据我所知,每个单独的语句都可以包含 GROUP BY、WHERE 和 HAVING。我错过了什么吗?

【问题讨论】:

  • 列和数据类型必须匹配。

标签: c# java sql sql-server database


【解决方案1】:

根据SQL syntax specification,返回多行的选择语句是一个查询表达式,后跟一个可选的ORDER BY子句:

<direct_select_statement:multiple_rows> ::=
    <query_expression> [ <order_by_clause> ]

反过来,查询表达式定义为

<query_expression> ::= <non-join_query_expression> | <joined_table>

非连接查询表达式是指定UNION的地方:

<non-join_query_expression>    ::= 
     <non-join_query_term>
 |     <query_expression> UNION [ ALL ] [ <corresponding_spec> ] <query_term>
 |     <query_expression> EXCEPT [ ALL ] [ <corresponding_spec> ] <query_term>

因此,在UNION ALL 子句的单个查询表达式中使用ORDER BY 在语法上是不正确的;没有其他类似的查询子句不能在UNION 中使用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-16
    • 1970-01-01
    • 2014-02-13
    • 1970-01-01
    相关资源
    最近更新 更多