今日、同僚がクエリを実行すると、なぜ、どのように失敗したのか説明できませんでした。 クエリは(抽象化)であった:無効な副選択を持つ照会が実行されるのはなぜですか?
UPDATE table1
SET columnToUpdate = 1
WHERE recordID IN (
SELECT recordID FROM table2 WHERE table2column IN (*list of values*))
問題は、彼がテーブルに両方のテーブルに存在し、表1のPKでPERSONID、のために、表1にのみ存在していると誤解レコードID、FKを持っていました2.
副選択が解決できないために照会が実行されなかったと思います(実際には、副選択だけを実行すると失敗します)。 代わりに上記のクエリを実行すると、以前はNULLと0の組み合わせであったtable1のすべてのレコードが更新されました。
これは簡単に修正できましたが、誰でもこの現象が発生する理由を説明できますか?
ありがとうございます!
内部選択に失敗したことを意味するのはエラーですか? –
これは、相関サブクエリが機能する方法です。確かに修正するのは簡単ですが、コーディングの習慣を変更して列の前にテーブルを指定すると、これらの種類のエラーを大幅に最小限に抑えることができます。 –