sql - Oracle 子查询无效标识符
问题描述
我无法弄清楚这个查询有什么问题:
select * from inv_srv_inst inst,
(select srvc.li_srv_cat_id from inv_li_srv_cat_srv srvc where srvc.srv_id = inst.service_id) li_srv_cat_id
where id in (37336558,37343286)
错误信息:
ORA-00904: "INST"."SERVICE_ID": 无效标识符 00904. 00000 - "%s: 无效标识符"
解决方案
ORA-00904: "INST"."SERVICE_ID": 标识符无效
您收到此错误是因为 INV_SRV_INST 不在内联视图的范围内。如果您使用的是 12c 或更高版本,您可以使用 LATERAL 关键字解决此问题,这允许我们将谓词推送到子查询中:
select *
from inv_srv_inst inst,
lateral (select srvc.li_srv_cat_id
from inv_li_srv_cat_srv srvc
where srvc.srv_id = inst.service_id) li_srv_cat_id
where id in (37336558,37343286)
尽管必须要问,为什么选择内联视图而不是仅仅连接两个表?
select inst.*
,srvc.li_srv_cat_id
from inv_srv_inst inst
inner join inv_li_srv_cat_srv srvc
on srvc.srv_id = inst.service_id
where inst.id in (37336558,37343286)
推荐阅读
- r - R - 3.5.0 - 无法在 Linux 上安装包“tm”
- json - 带有日期和变量问题的 jq
- python - Python 2.7 中的代码退出问题
- docker - 无法使用 Sarama Golang 包创建 Kafka 生产者客户端-“客户端/元数据在获取元数据时从代理收到错误:EOF”
- ruby-on-rails - 为什么此块不适用于我的 ERB 模板
- java - java中的备忘录。可变状态
- python - 当项目解释器设置为 conda 并且包不是由 conda 提供/列出时,如何在 PyCharm 中安装包?
- css - VSCode 更漂亮的 CSS 注释添加行?
- cassandra - 在 cassandra 中写得很重是什么意思?
- windows - 连接 PS2 键盘