Oracle Live SQL 中的错误 -> ORA-00918:列定义不明确

Posted

技术标签:

【中文标题】Oracle Live SQL 中的错误 -> ORA-00918:列定义不明确【英文标题】:ERROR in Oracle Live SQL -> ORA-00918: column ambiguously defined 【发布时间】:2021-09-19 03:36:10 【问题描述】:
'--create table dept(empid number(4) PRIMARY KEY ,ename varchar2(30) not null,sal number(6) not null,design varchar2(30),mgrid number(4),deptid number(2) not null);  
 --alter table dept add constraint C1 foreign key(mgrid) references dept(empid);

--insert into dept values(1005,'vivek',100000,'Director',null,30);
--insert into dept values(1004,'sumit',70000,'sr manager',1005,10);
--insert into dept values(1003,'amit',60000,'manager',1005,20);
--insert into dept values(1002,'shyam',30000,'clerk',1003,10);
--insert into dept values(1001,'ram',50000,'mgr',1005,10);

  select * from dept;

  select ename emp_name,ename reporting_off from dept dept3 ,dept dept4 where dept3.mgrid=dept4.empid(+);

  select ename emp_name,ename reporting_off from dept dept3 ,dept dept4 where dept3.mgrid=dept4.empid; '

我尝试更改别名,但这并不能解决问题。我该如何纠正这个问题?

【问题讨论】:

这个名字是来自 dept3 还是 dept4?数据库不知道 请使用真正的JOIN 【参考方案1】:

您在这里尝试自联接,当您在选择列表中选择列时,当列存在于from 子句中提到的多个表中时,您必须在列旁边添加表别名prefix

在您的示例中,您选择了两次列 ename,一次用于员工,另一次用于经理,并且由于您没有在应该引用哪个表的列前加上前缀,导致此处出现歧义。

您已经知道连接条件,并且基于该前缀列以及我假设的列,

select dept3.ename emp_name
      ,dept4.ename reporting_off 
  from dept dept3 ,dept dept4 
 where dept3.mgrid=dept4.empid(+);

【讨论】:

以上是关于Oracle Live SQL 中的错误 -> ORA-00918:列定义不明确的主要内容,如果未能解决你的问题,请参考以下文章

Oracle Live SQL:ORA-00907:缺少右括号 -

最方便的在线Oracle SQL学习环境--Live SQL

最方便的在线Oracle SQL学习环境--Live SQL

最方便的在线Oracle SQL学习环境--Live SQL

在Oracle sql live上运行时缺少右括号[关闭]

将 JDeveloper 应用程序连接到 Oracle Live SQL