单个UNION语句中不允许的子句
问题描述:
我正在用C#和Java编写查询生成器,并且担心生成UNION语句。我知道UNION子句中的每个单独语句都不能包含ORDER BY子句,而是必须放在完整union语句的末尾。是否还有其他条件我应该知道?即通常适用于单个选择语句的条件,但是当放置在UNION
语句中时会导致问题?据我所知,每个单独的陈述可以包含GROUP BY,WHERE和HAVINGs。我错过了什么吗?单个UNION语句中不允许的子句
答
根据该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
列和数据类型必须匹配。 – 2013-03-16 11:27:21