首页 > 解决方案 > SQL Select - Union 结合 Join 查询导致错误

问题描述

我是一名学习 SQL 的业余爱好者,需要从三个表中获取记录,其中两个表的结构services, services_log名称visit

select vi.desc, serv.* from services serv
inner join visit vi
on serv.service_id = vi.visit_service_code
where serv.id = '777777'
union all 
select vi.desc, servlog.* from services_log serv.servlog
inner join visit vi
on servlog.service_id = vi.visit_service_code
where servlog.id = '777777'

上面的查询可以毫无问题地获取所需的记录,但我想尝试一些更干净的东西并在下面执行。

select vi.desc, serv.* from (select * from services union all select * from services_log) as serv
inner join visit vi
on serv.service_id = vi.visit_service_code
where serv.id = '777777'

但是,这会显示错误。

ORA-00933: SQL 命令未正确结束

上述第二个查询的语法不正确吗?是否有一个更清晰的查询我可以尝试获得结果而不是第一个查询?

谢谢你。

标签: sqloracleselectinner-joinunion-all

解决方案


您的语法错误asfrom子句中。Oracle 不支持as表别名。

所以这是允许的:

from (select * from services union all
      select * from services_log
     ) serv

但不是:

from (select * from services union all
      select * from services_log
     ) as serv

即使这解决了直接的语法问题,您仍然需要保证两个表中的列是相同的并且以相同的顺序定义才能正常工作。


推荐阅读