悪いタイトルでごめんなさい-私はより良いものを考えることができません。
基本的に、SQL Server 2008は、失敗すると予想されるサブクエリを処理しています。
簡単な例を次に示します。
CREATE TABLE UserDemographics
(
UserID INT,
UserName NVARCHAR(500)
)
CREATE TABLE UserAddresses
(
UserAddressID INT,
Address NVARCHAR(500)
)
INSERT INTO UserDemographics(UserID, UserName) VALUES(1, 'Joe'), (2, 'Sam'), (3, 'Ed')
INSERT INTO UserAddresses(UserAddressID, Address) VALUES(1, '1st Street'), (2, 'Old Address 1'), (3, 'Old Address 2')
DELETE FROM UserDemographics
WHERE UserID IN
(
SELECT UserID FROM UserAddresses
)
これが興味深い理由は次のとおりです。。UserAddresses
という列がありませんUserID
。相関サブクエリは、クエリしているテーブルに存在しない列を選択しています。
明らかに、それは相関サブクエリと関係があります-テーブルUserID
の列でUserDemographics
あり、何らかの理由でデータベースがその参照を作成しています。
おそらく、UserDemographics
テーブルはサブクエリのfrom-listに含まれています。
誰かがこれを説明できますか?