2013-03-16 43 views
0

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

+0

列和数据类型必须匹配。 – 2013-03-16 11:27:21

回答

2

根据该SQL syntax specification,选择语句返回多个行是一个查询表达式接着任选的ORDER BY子句:

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

反过来,查询表达式的定义是

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

和非-join查询表达式指定了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中使用。

+0

+1,感谢您的信息! – 2013-03-16 11:49:00