select * from cust
where cust_id in
(select cust_id from acc_co
where objectum = 'EXIST');
acc_co 表中没有 cust_id 列。但是当我运行选择时,它有结果。但是如何?
(此选择的结果与 cust 表的行号相同。)
答案 0 :(得分:1)
为列添加前缀应该为您回答这一问题:
select * from cust c
where c.cust_id in
(select a.cust_id from acc_co a
where a.objectum = 'EXIST');
VS
select * from cust c
where c.cust_id in
(select c.cust_id from acc_co a
where a.objectum = 'EXIST');
cust
表)。ORA-00918: column ambiguously defined
HTH
答案 1 :(得分:1)
问题是您不使用别名,因此DBMS认为cust_id
是第一个表cust
的列。由于使用的是相关子查询,因此可以将子查询中的数据识别为内部表数据或外部表数据。这种情况不仅适用于Oracle
,而且适用于任何RDBMS。为了避免这种歧义,请在相关子查询中使用别名。