请解释一下为什么这个 SQL 查询有效。 field_99 仅存在于 table_1 中! 我不明白为什么,但它有效 - 这是事实。如果有必要的话,我们会使用 Oracle。
SELECT *
FROM table_1
WHERE table_1.field_1 IN
(SELECT table_2.field_1
FROM table_2
WHERE table_2.field_2 IN ('0000')
AND (field_99 LIKE '%AAA%' OR field_99 LIKE '%BBB%' OR field_99 LIKE '%CCC%'));
如果OK的话,一定会返回和下面[正确]一样的结果吗?
SELECT *
FROM table_1
WHERE table_1.field_1 IN
(SELECT table_2.field_1
FROM table_2
WHERE table_2.field_2 IN ('0000'))
AND (field_99 LIKE '%AAA%' OR field_99 LIKE '%BBB%' OR field_99 LIKE '%CCC%');
我运行了第一个查询,预计它会返回错误。
此查询之所以有效,是因为内部查询从外部查询中的封闭行获取
field_99
的值。
由于
field_99
值与来自内部查询的任何值之间没有相关性,因此它确实毫无意义(并非完全错误,正如您所指出的,查询有效,但毫无意义)。