sql select-union与join查询组合的结果出现错误

ryoqjall  于 2021-07-24  发布在  Java
关注(0)|答案(1)|浏览(334)

我是一个学习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命令未正确结束
上面第二个查询的语法不正确吗?有没有一个更干净的查询,我可以尝试实现的结果,而不是第一次查询?
谢谢您。

4smxwvx5

4smxwvx51#

你的语法错误是 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

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

相关问题