0

来自 mysql ref 手册:“UNION 中的第二个或以后的 SELECT 语句,取决于外部查询”。但是 UNION 查询如何依赖于外部查询呢?谁能给我一个清楚的例子这是什么意思?例如,在此查询中:

SELECT * FROM sometable 
WHERE id IN (
    SELECT 1
    UNION
    SELECT 2 /* ! */
)

union 中的第二个 select 语句(它本身是子查询)有 DEPENDENT UNION select_type 我不知道为什么,它必须只是 UNION 因为它不依赖任何东西。

4

1 回答 1

1

好吧,这种情况下的问题是IN运算符,因为IN子句中的子查询被重写为相关子查询。

如果是联合,则相关子查询将为您提供“依赖子查询”或“依赖联合”。

文档

问题在于,对于使用 IN 子查询的语句,优化器将其重写为相关子查询。考虑以下使用不相关子查询的语句:

SELECT ... FROM t1 WHERE t1.a IN (SELECT b FROM t2); 优化器将语句重写为相关子查询:

SELECT ... FROM t1 WHERE EXISTS (SELECT 1 FROM t2 WHERE t2.b = t1.a);

于 2013-10-04T21:02:21.937 回答