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