我是一个学习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命令未正确结束
上面第二个查询的语法不正确吗?有没有一个更干净的查询,我可以尝试实现的结果,而不是第一次查询?
谢谢您。
1条答案
按热度按时间4smxwvx51#
你的语法错误是
as
在from
条款。oracle不支持as
用于表别名。所以这是允许的:
但不是:
即使这解决了直接的语法问题,您仍然需要保证两个表中的列是相同的,并且以相同的顺序定义,这样才能工作。