SQL Server中Union查询给第二个子查询加别名报语法错误的原因?
SQL Server UNION 查询子查询别名报错原因解释
核心语法规则
UNION/UNION ALL 属于结果集合并运算符,作用是将两个独立的SELECT语句的执行结果按行合并为一个统一的结果集,它不属于FROM子句的表关联逻辑,只有当子查询作为数据源出现在FROM后、需要被上层查询引用时,才必须加别名。
报错根因
你的报错代码结构可以拆解为:
SELECT * FROM 子查询1 f -- 子查询1是FROM后的数据源,加别名f完全合法 UNION ALL 子查询2 s -- 子查询2是参与UNION合并的独立查询,不是任何FROM后的数据源,加别名s违反语法规则
SQL Server解析到子查询2后面的s时,找不到对应的语法规则匹配,就会抛出你遇到的Incorrect syntax near 's'错误。
补充写法说明
如果你确实需要给合并后的整个结果集加别名(比如要将合并结果作为子查询做二次筛选、关联等操作),正确的写法是将整个UNION逻辑套在同一个括号里加别名:
SELECT * FROM ( SELECT 'Fail' [Status],fail_date[Date] FROM Failed UNION ALL SELECT 'Success' [Status], success_date[Date] FROM Succeeded ) t -- 别名给整个合并后的结果集使用
另外你原本可以正常运行的代码,还可以简化为直接合并两个SELECT,不需要额外套第一层子查询:
SELECT 'Fail' [Status],fail_date[Date] FROM Failed UNION ALL SELECT 'Success' [Status], success_date[Date] FROM Succeeded
内容的提问来源于stack exchange,提问作者24SVEN
相关产品推荐
相关产品推荐

