我正在用 C# 和 Java 编写查询生成器,并且担心生成 UNION 语句。我知道 UNION 子句中的每个单独的语句都不能包含 ORDER BY 子句,而必须将其放在完整的 union 语句的末尾。还有其他我应该注意的条件吗?即通常适用于单个选择语句的条件,但是在放置在UNION
语句中时会导致问题?据我所知,每个单独的语句都可以包含 GROUP BY、WHERE 和 HAVING。我错过了什么吗?
问问题
49 次
1 回答
2
根据SQL 语法规范,返回多行的 select 语句是一个查询表达式,后跟一个可选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>
因此,在子句ORDER BY
中的单个查询表达式中使用在UNION ALL
语法上是不正确的;没有其他类似的查询子句不能在 a 中使用UNION
。
于 2013-03-16T11:41:19.953 回答