如何在一个 "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_NUMBER
的 PCC_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
我的问题:一个字段是否可以在特定记录中同时具有两个值?当然没有。
如果您有 range
个 CTRL_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)
我正在使用 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_NUMBER
的 PCC_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
我的问题:一个字段是否可以在特定记录中同时具有两个值?当然没有。
如果您有 range
个 CTRL_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)