【发布时间】:2018-09-17 16:21:40
【问题描述】:
我不明白为什么以下查询有效,尽管子查询给出了“无效标识符”错误。
SELECT *
FROM aircraft
WHERE airc_manufact IN (SELECT airc_manufact FROM flight);
我的表格如下所示(缩写):
AIRCRAFT(airc_model (PK),airc_manufact)
飞行(flt_no (PK),airc_model (FK))
如果我自己运行子查询,我会收到一个“无效标识符”错误,因为 airc_manufact 不是飞行表中的列。
如果我运行整个查询,则不会收到错误消息。 Oracle 似乎忽略了子查询,因此给了我飞机表中的所有行。
对我来说,这似乎是一个错误,因为查询中有一个明显的错误。为什么查询会运行?我的理解是,Oracle 会先运行或评估子查询,然后再运行外部查询。
【问题讨论】:
-
子查询从外部查询中获取列。提示:笛卡尔连接
-
@dustytrash - 不是真正的“笛卡尔连接” - 更像是“笛卡尔半连接”。 (“半连接”是一个技术术语,它是
IN或EXISTS条件所做的。) -
谢谢。结合 Gordon 的回答,很有道理。