0
由於應用程序找不到所需的數據,我不得不昨天恢復表內容。 在檢查發生了什麼後,我們發現了一個非常可怕的情景。 開發團隊的意思是刪除表中的特定帖子並執行下面的查詢。informix中的可怕子查詢
delete from table_3 where table2_id in (
select table2_id from table2
where table1_id in (500, 557, 256, 158, 598, 601)
);
這導致刪除了table3中的所有帖子。 雖然表2中的主鍵名爲id
而不是table2_id
,但查詢中存在錯誤。 正確的查詢應該如下所示。
delete from table_3 where table2_id in (
select id from table2
where table1_id in (500, 557, 256, 158, 598, 601)
);
總結。 當試圖分別執行有故障的子查詢時,它會正確地拋出一個錯誤,即表2中沒有名爲table2_id
的列,但執行整個查詢時不會拋出錯誤,並且刪除了表3中的所有帖子。
如果子查詢出現錯誤,它在執行整個查詢時不應該拋出錯誤嗎?
I.e. 「從table_3中刪除where table2_id in(select table_3.table2_id from table2 ...」is executed! – jarlh 2015-04-02 11:36:36
我意識到同樣的事情,當我再次看看查詢時 我沒有與外部查詢中的表進行連接首先。 – 2015-04-02 11:53:01