想象一个查询
SELECT Col_A FROM TABLE_A WHERE Col_A IN (SELECT Col_A FROM TABLE_B) 除了,TABLE_B没有Col_A列;只有TABLE_A有它。我在Oracle12中尝试过这种方法,但我不确定它的版本有多远,但它似乎返回了显示来自TABLE_A的所有TABLE_A数据的有效结果。作为一个开发人员,我希望这样的东西会引发错误,因为内部查询甚至不会再次访问TABLE_A。有人能解释为什么或在哪里使用像上面这样的查询情况,因为我几乎觉得它应该是系统中的一个bug。
发布于 2018-02-22 20:17:00
这不是虫子。由于您没有限定该列,Oracle将其解释为表A中的当前列值--该表位于范围内(cf )。(a 相关子查询)。因此,子查询只产生与表B中的行相同的列值的重复项。
基于此,in条件将变为true或false。当表B为空时,它始终是假的。在Col_A为null的情况下,它也将是假的。但在所有其他情况下,这将是真实的。因此,您将得到与表A中有非空值的Col_A中的行相同的结果,除非表B是空的,在这种情况下没有得到结果。
https://stackoverflow.com/questions/48936370
复制相似问题