首页 > 解决方案 > 如何从子选择中选择不存在的列?

问题描述

select * from cust
where cust_id in
(select cust_id from acc_co
where objectum = 'EXIST');

acc_co表中没有cust_id列。但是当我运行选择时,它有结果。但是怎么做?

(这次选择的结果和cust表的行号是一样的。)

标签: sqloraclesql-subselect

解决方案


为列添加前缀应该为您回答这个问题:

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表格)。
  • 第一个版本尝试执行您认为您对查询所做的事情:选择一个不存在的列。
  • 第二个版本显示了 oracle 如何实际解释您的查询。
  • 谷歌的主题是表别名,那里有很多页面可以很好地解释它们
  • 使用别名来避免这种情况通常是一种好习惯
  • 当列名仅出现在查询的一个表中时,oracle 允许您不使用查询中的别名。
  • 一旦一列出现在多个表中,oracle 就会抛出错误:ORA-00918: column ambiguously defined

高温高压


推荐阅读