sql - 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 命令未正确结束
上述第二个查询的语法不正确吗?是否有一个更清晰的查询我可以尝试获得结果而不是第一个查询?
谢谢你。
解决方案
您的语法错误as
在from
子句中。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
即使这解决了直接的语法问题,您仍然需要保证两个表中的列是相同的并且以相同的顺序定义才能正常工作。
推荐阅读
- c# - 如果“值类型”变量仍在被另一个线程使用(由“ref”传递),那么在离开方法范围时如何从堆栈中释放它?
- haskell - Haskel - Gloss:平铺表(或如何从图片中提取区域)
- google-apps-script - 用于显示/隐藏工作表的按钮中的 Google Apps 脚本
- java - 我需要正确发送请求,但我不知道如何从对象中获取所需的值
- php - 根据作者 ID 更改帖子 URL
- android - Flutter 如何获取可迭代的 .toList() 列表的长度?
- git - 从 git 分支的历史记录中删除某些提交
- python - Python Pandas - 如何按具有多个值的多列中的值按计数分组
- flutter - 一旦使用 bloc 触发事件,底部工作表就会重复显示
- python - 如何使用列表理解创建这个嵌套列表?