SQL Select - Union 结合 Join 查询结果出错

SQL Select - Union combined with Join query results an Error

我是业余爱好者SQL,需要从三个 table 中获取记录,其中两个的列结构和名称 (services, services_log) 相同,其中一个 UNION 和一个 table (visit) 可以 JOIN 前两个 table 使用同一列名字。

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 command not properly ended

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

谢谢。

您的语法错误是 from 子句中的 as。 Oracle 不支持 table 别名的 as

所以这是允许的:

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

但不是:

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

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