sql - 在 Oracle DBMS 中使用单个 SQL 查询更新多行

标签 sql oracle sql-update

我有一个表 A,其结构如下:

ID   Name  City  zip

1    xxx   wer   134

2    yyy   qwe   234

3    zzz   ert   256

4    www   qwe   567

现在我想用一个 SQL 查询更新多行。例如查询:

UPDATE A
   SET zip= '355'
   WHERE id= '2';

将更新一行,如果我还想仅通过一个查询更新 ID 为 1 和 4 的行,ZIP 不同怎么办?

最佳答案

如果您的意思是要通过一个查询将多行更新为同一个 zip,您可以使用以下命令:

UPDATE A
   SET zip= '355'
   WHERE id in ('1','4');

但是,如果您的意思是要将多行更新为 zip 值,那么如果没有一些逻辑背后的 id 应该获取哪个 zip,则无法完成。例如,如果你只想做一些不同的值,你可以使用类似的东西:

UPDATE A
   SET zip= decode(id,'1','100','4','400')
   WHERE id in ('1','4');

这会将 id 为“1”的任何行的 zip 设置为“100”,将 id 为“4”的任何行设置为“400”,依此类推。您可以根据需要添加任意数量的参数。如果您想要任何未列出的默认值,只需将其添加到末尾,例如decode(id,'1','100','4','400','999') 将设置任何不是 id '1' 或 '4' 的(但不排除)在 where 语句中为 '999')。

如果您有很多不同的值,那么我建议创建一个引用数据表并从该表中进行选择作为您更新语句中的子查询。

关于sql - 在 Oracle DBMS 中使用单个 SQL 查询更新多行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19565525/

相关文章:

sql - 事先连接会带来意想不到的结果

oracle - Oracle 11g 客户端是否需要 ODP.NET?

MySql 更新 : Can't specify target table for update in FROM clause

MySQL - 在集合查询中的 WHERE 之前有 AND 意味着什么?

mysql - 不同计数索引 - MYSQL

sql - SELECT TOP 1 的 ANSI SQL 版本

mysql - 制定查询来检测不一致的数据

sql - 物化 View 支持大查询或任何类似功能

PHP,mysql_query 只是不工作

sql - T-SQL 中的加权平均值(如 Excel 的 SUMPRODUCT)