ホームページ >データベース >mysql チュートリアル >SQL Server 2008 Management Studio では、相関サブクエリ内の無効な列参照を含む削除クエリが正常に実行できるのはなぜですか?

SQL Server 2008 Management Studio では、相関サブクエリ内の無効な列参照を含む削除クエリが正常に実行できるのはなぜですか?

Patricia Arquette
Patricia Arquetteオリジナル
2025-01-20 01:06:10857ブラウズ

Why Does SQL Server 2008 Management Studio Allow a Delete Query with an Invalid Column Reference in a Correlated Subquery to Execute Successfully?

SQL Server 2008 Management Studio の構文チェック動作

SQL Server 2008 Management Studio で、無効な列参照を含むクエリを実行すると、予期しない動作が観察されました。クエリは次のとおりです:

delete from Photo where hs_id in (select hs_id from HotelSupplier where id = 142)

「hs_id」は「HotelSupplier」テーブルの有効な列名ではありませんが (正しい列名は「hs_key」です)、クエリは正常に実行され、「Photo」テーブルのすべての行が削除されます。ここで疑問が生じます: 構文の問題が原因でクエリが失敗するはずはありませんか?

その答えは、相関サブクエリの概念にあります。 「DELETE」ステートメントはサブクエリに関連付けられています。これは、サブクエリ内の「hs_id」参照が外側のクエリ (「Photo」) の「hs_id」列に解決されることを意味します。

これは有効な動作であり、テーブル名を明示的に指定せずにクエリで親テーブルの列を参照できるようになります。この場合、結果は次と同等になります:

delete from Photo where Photo.hs_id in (select Photo.hs_id from HotelSupplier where id = 142)

サブクエリ自体が列を明示的に射影していない場合でも、外側のクエリのパターンはサブクエリに伝播されます。

したがって、このような「構文に準拠していない」クエリが成功し、サブクエリ内の修飾されていない列参照を外部クエリに関連付けることは、SQL Server の通常の動作であると考えられます。

以上がSQL Server 2008 Management Studio では、相関サブクエリ内の無効な列参照を含む削除クエリが正常に実行できるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。