我正在尝试使用游标更新表。但只有一些记录被更新而其他记录没有更新。更新查询的where子句有一个带索引的列。你可以解释为什么以及如何处理这个问题?
update table_name
set table_column1='text'
where table_column2=(select distinct table_column2 from table);
index在table_column2上。
答案 0 :(得分:0)
让我们进行一些有根据的猜测。如果你自己执行SELECT DISTINCT TABLE_COLUMN2 FROM TABLE,我怀疑你会发现你只返回一个值,并且TABLE_NAME中TABLE_COLUMN2等于DISTINCT查询返回的值的行是已更新的行。这可能是您的期望与数据库中的数据不同的情况。我相信必须如此,因为如果DISTINCT查询返回多个值,Oracle会抛出错误(如上面的@ a1ex07评论中所述)。您可能希望重写查询以使用IN条件,如
update table_name
set table_column1='text'
where table_column2 IN (select distinct table_column2 from table)
TABLE_COLUMN2上的索引应该对UPDATE语句的行为没有影响。
分享并享受。