看到一位同事今天運行查詢,我無法解釋爲什麼或者它沒有失敗。 查詢被(抽象):爲什麼具有無效子查詢的查詢會運行?
UPDATE table1
SET columnToUpdate = 1
WHERE recordID IN (
SELECT recordID FROM table2 WHERE table2column IN (*list of values*))
問題是他有錯的recordId,這是僅在表1目前,對於PERSONID,這是目前在兩個表中,並且是PK在表1,FK在表2.
我會以爲查詢不會運行,由於子選擇無法解決(事實上,如果你單獨運行子選擇,它會失敗)。 而是,運行上述查詢更新了table1中以前爲NULL和0的組合的所有記錄。
修復起來很簡單,但任何人都可以解釋爲什麼會發生此行爲?
謝謝!
您的意思是內部選擇失敗?您的意思是給出錯誤或返回null? –
這就是相關子查詢是如何工作的。當然,修復起來很容易,但如果您將編碼習慣改爲始終在列前指定表格,您將極大地減少這些類型的錯誤。 –