如何在一个 "Where" 子句下更新多条记录? (甲骨文 SQL)

How do I update multiple records under one "Where" clause? (Oracle SQL)

我正在使用 Oracle SQL 并且无法从我的 CTRL_NUMBER [=38 更新大量特定记录=]。目前,当我只想更新一条记录时,以下表达式有效:

UPDATE STOCK
SET PCC_AUTO_KEY=36 WHERE CTRL_NUMBER=54252

但是,由于我有 超过 1,000 条记录要更新,我不想为每条记录都输入此内容 (CTRL_NUMBER)。因此,我尝试仅使用两条记录进行以下操作,并且数据库没有在 SET 条件下使用新的 PCC_AUTO_KEY 进行更新。

UPDATE STOCK
SET PCC_AUTO_KEY=36 WHERE CTRL_NUMBER=54252 AND CTRL_NUMBER=58334

当我执行上面的表达式时,我没有收到任何错误代码,它会让我提交表达式,但是在我验证CTRL_NUMBER后数据库信息没有改变。

我还能如何处理此更新工作,或者我应该如何更改我的表达式以成功更新多个 CTRL_NUMBERPCC_AUTO_KEY

感谢您的宝贵时间!

使用 IN 子句 -

UPDATE STOCK SET PCC_AUTO_KEY=36 WHERE CTRL_NUMBER IN (54252, 58334)

您的语句正在尝试更新 CTRL_NUMBER 是 54252 和 58334 的位置,但一次只能是其中之一。 如果您将语句更改为

UPDATE STOCK SET PCC_AUTO_KEY=36 WHERE CTRL_NUMBER=54252 OR CTRL_NUMBER=58334

它会起作用。

UPDATE STOCK SET PCC_AUTO_KEY=36 WHERE CTRL_NUMBER IN (54252, 58334)

UPDATE STOCK SET PCC_AUTO_KEY=36 WHERE (CTRL_NUMBER=54252 OR CTRL_NUMBER=58334)

使用 IN 子句可能是最好的方法,正如 czuroski 所回答的那样,在您的语句中使用 AND 子句的问题是记录必须在一条记录中同时包含 ctrl_numbers,所以0 条记录将 return 并且不会进行任何更新(并且没有错误)...除了 IN 语句之外,您还可以使用 OR 子句,它将是:

... 其中(CTRL_NUMBER = 54252 或 CTRL_NUMBER = 58334)

使用 ( ) 允许您有其他 WHERE 条件,但我通常也使用 IN 来满足同一字段中的多个要求。

在你的第二个 Update 命令中,你有:

WHERE CTRL_NUMBER=54252 AND CTRL_NUMBER=58334

我的问题:一个字段是否可以在特定记录中同时具有两个值?当然没有。

如果您有 rangeCTRL_NUMBER 的值,并且您想根据它们更新 table,您可以使用以下 where 子句进行更新:

WHERE CTRL_NUMBER BETWEEN range1 AND range2

 WHERE CTRL_NUMBER >= range1 AND CTRL_NUMBER <= range2

但是: 如果您没有特定范围并且您有不同的 CTRL_NUMBER 值,那么您可以在 where 子句中使用 IN 运算符:

WHERE CTRL_NUMBER IN (value1,value2,value3,etc)

您还可以从另一个 select 语句中获取您的值:

WHERE CTRL_NUMBER IN (SELECT value FROM anotherTable)