如何在MariaDB中使用SQL UNION结果?UNION查询加SELECT报错原因求解
报错原因
该报错是SQL标准的硬性要求导致的:所有放在FROM子句中的派生表(也就是你写的UNION整体组成的子查询)必须指定别名,否则数据库解析器无法识别该表的字段引用,直接抛出语法错误。
你注释select * from的时候,整个语句是直接返回UNION排序后的结果,不需要作为子查询被上层引用,所以可以正常执行。
修复后的正确写法
只需要给UNION组成的派生表加一个任意合法的别名即可:
select * from ( (select HireDate HireTermDate from employee) union (select TerminationDate HireTermDate from employee where TerminationDate is not null) order by HireTermDate asc ) as emp_dates; -- 这里的emp_dates就是派生表的别名,可自定义
UNION查询结果的使用注意事项
- 当UNION的结果作为派生表放在
FROM后做嵌套查询时,必须指定别名,所有主流关系型数据库(MySQL、PostgreSQL、SQL Server等)都遵循该规则 - UNION左右两侧的子查询返回的字段数量、字段类型必须一一对应,否则会执行报错
- 如果你不需要对合并后的结果去重,建议用
UNION ALL替代UNION,可省去UNION默认的去重排序开销,执行效率大幅提升 - 如果需要给UNION的单个子查询加
ORDER BY或者LIMIT,需要将单个子查询用括号单独包裹,否则排序/分页规则会被识别为作用于整个UNION的结果集
内容的提问来源于stack exchange,提问作者fluffy_bunny
相关产品推荐
相关产品推荐

