SQLUNION、UNIONALL⽤法以及常见报错与解决⽅法
SQL UNION 操作符
UNION 操作符⽤于合并两个或多个 SELECT 语句的结果集。
请注意,UNION 内部的 SELECT 语句必须拥有相同数量的列。列也必须拥有相似的数据类型。同时,每条 SELECT 语句中的列的顺序必须相同。
SQL UNION 语法
SELECT column_name(s)FROM table_name1
UNION
SELECT column_name(s)FROM table_name2
注释:默认地,UNION 操作符选取不同的值。如果允许重复的值,请使⽤ UNION ALL。
SQL UNION ALL 语法
SELECT column_name(s)FROM table_name1
UNION ALL
SELECT column_name(s)FROM table_name2
另外,UNION 结果集中的列名总是等于 UNION 中第⼀个 SELECT 语句中的列名。
报错及解决措施
使⽤UNION操作符时容易报错如下:
解析错误:org.apache.hadoop.hive.ql.parse.ParseException: line 5:0 cannot recognize input near ‘UNION’ ‘(’
‘SELECT’ in set operator
把使⽤的代码简化如下:
SELECT
sql语句查询不包含device_id
FROM
tableA
UNION
(SELECT
device_id
FROM
tableB as a1
INNER JOIN tableC as a2
on a1.device_id = a2.device_id
)
主要是因为,UNION操作符只能连接字段与字段,⽽不能连接字段与表 或者 表与表,哪怕字段数以及字段名称、格式都⼀样也不⾏。
因此,UNION 操作符前后是不能带有括号的,因为带有括号的话SQL就容易会判定这是⼀个⼦查询/表,所以连接时就容易报错
解决⽅法
1. 尽量不要在UNION前后使⽤括号
2. 如果筛选数据时需要⽤到⼦查询或者join操作时,把这类操作统⼀放到FROM后⾯,即,先把tableB和tableC 进⾏join或者其他操作
后当成表D,然后再select from 表D
注意事项
1. SQL 语句中可以使⽤多个 UNION 运算符
2. 在使⽤了 UNION 运算符的各个 SELECT 语句不能包含它们⾃⼰的 ORDER BY 或 COMPUTE ⼦句。⽽只能在最终的组合结果集
(即最后⼀个 SELECT 语句的后⾯)使⽤⼀个 ORDER BY 或 COMPUTE ⼦句。
3. 在使⽤了 UNION 运算符的各个 SELECT 语句中可以使⽤ GROUP BY 和 HAVING ⼦句。
4. 默认情况下,SQL Server 2005 从左向右对包含 UNION 运算符的语句求值。可使⽤圆括号指定求值顺序,(我还没有对其他平台
做过完整测试,所以还是先统⼀避免使⽤括号吧,所以需要指定运算顺序的话,⾃⼰把那个先求值的部分写在SQL语句的前⾯即可)。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。