0

mysql ref manualから:「外部クエリに依存する、UNION 内の 2 番目以降の SELECT ステートメント」。しかし、UNION クエリは外部クエリにどのように依存するのでしょうか? 誰かがそれが何を意味するのか明確な例を教えてもらえますか? たとえば、次のクエリでは:

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

ユニオン (それ自体がサブクエリ) の 2 番目の 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 に答える