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 中的列是相同的并且以相同的顺序定义才能工作。
我是业余爱好者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 中的列是相同的并且以相同的顺序定义才能工作。