我问这个问题,因为我没有收到错误,我预计会出现错误。 请帮助我了解在什么情况下这是可能的。我有一个问题:
select foracid,acct_name, schm_code, schm_type from tbaadm.gam where
acid in(select acid from tbaadm.iar);
此查询返回结果而不会抛出任何错误。我希望无效的标识符 因为表tbaadm.iar没有字段酸。 我跑的时候:
select acid from tbaadm.iar;
我明白了:
ORA-00904: "ACID": invalid identifier
00904. 00000 - "%s: invalid identifier"
*Cause:
*Action:
Error at Line: 772 Column: 8
我正在使用sqldeveloper和oracle 10g。这对我来说很奇怪。值得一提的是,tbaadm.iar中有一个字段是id,所以正确的查询应该是:
select foracid,acct_name, schm_code, schm_type from tbaadm.gam where
acid in(select entity_id from tbaadm.iar);
这里发生了什么?
答案 0 :(得分:3)
在IN
子句中使用的子查询可以引用外部查询中的列,因为这在相关子查询中是必需的。所以你的WHERE子句相当于:
WHERE acid IN (SELECT tbaadm.gam.acid FROM tbaadm.iar)
相关子查询的一个示例说明了为什么这是必要的:
SELECT *
FROM outer_table
WHERE somefield = (SELECT someotherfield
FROM inner_table
WHERE inner_table.id = outer_table.inner_id)
这是更常见的用法,其中外部表中的字段用于子查询的WHERE
子句中。但SQL并不挑剔使用外部查询的字段。它可以在允许表达式的子查询中的任何位置使用,包括SELECT
子句。