Я наткнулся на поведение SQL, я не понимаю. Мне нужно было обновить несколько строк в таблице одновременно; начал с того, что просто нашел их:
SELECT * FROM some_table WHERE field1 IN (SELECT ...)
Это вернуло выбор около 60 строк. Теперь я был уверен, что правильно понял подзапрос, поэтому я изменил только первую часть :
UPDATE some_table SET field2 = some_value WHERE field1 IN (SELECT ...)
Другими словами, это было точно так же, как первый запрос после WHERE
. Однако это привело к обновлению 0 строк, тогда как я ожидал бы, что эти 60. Обратите внимание, что приведенный выше оператор изменит , изменит field2
, то есть я убедился, что some_value
не присутствовал в выбранных строках. *
Подзапрос представлял собой скромно сложную часть SQL с 2 (разными) таблицами, 1 представлением, объединениями и собственным предложением WHERE
. В случае, если это имеет значение, это произошло с Oracle Database 10g.
Итак, вопрос в том, почему UPDATE
не коснулся строк, возвращенных SELECT
?