sql - 如何从子选择中选择不存在的列?
问题描述
select * from cust
where cust_id in
(select cust_id from acc_co
where objectum = 'EXIST');
在acc_co表中没有cust_id列。但是当我运行选择时,它有结果。但是怎么做?
(这次选择的结果和cust表的行号是一样的。)
解决方案
为列添加前缀应该为您回答这个问题:
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
高温高压