为什么这个 SQL 查询有效?

问题描述 投票:0回答:1

请解释一下为什么这个 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%');

我运行了第一个查询,预计它会返回错误。

sql oracle select subquery
1个回答
1
投票

此查询之所以有效,是因为内部查询从外部查询中的封闭行获取

field_99
的值。

由于

field_99
值与来自内部查询的任何值之间没有相关性,因此它确实毫无意义(并非完全错误,正如您所指出的,查询有效,但毫无意义)。
您可以按照您的建议安全地重写查询,恕我直言,它也会更容易理解。

© www.soinside.com 2019 - 2024. All rights reserved.