如何更新一个" Where"条款? (Oracle SQL)

时间:2015-04-10 20:27:59

标签: sql oracle where-clause

我正在使用 Oracle SQL ,但在更新CTRL_NUMBER 中的大量特定记录时遇到问题。目前,当我只想更新一条记录时,以下表达式有效:

UPDATE STOCK
SET PCC_AUTO_KEY=36 WHERE CTRL_NUMBER=54252

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

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

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

我还可以如何处理此更新工作,或者如何更改表达式以成功更新多个PCC_AUTO_KEY的{​​{1}}?

谢谢你的时间!

4 个答案:

答案 0 :(得分:3)

在第二个Update命令中,您有:

WHERE CTRL_NUMBER=54252 AND CTRL_NUMBER=58334

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

如果range的值为CTRL_NUMBER,并且您希望根据这些值更新表格,则可以使用以下where子句进行更新:

WHERE CTRL_NUMBER BETWEEN range1 AND range2

 WHERE CTRL_NUMBER >= range1 AND CTRL_NUMBER <= range2

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

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

您还可以使用其他select声明中的值:

WHERE CTRL_NUMBER IN (SELECT value FROM anotherTable)

答案 1 :(得分:1)

使用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

它会起作用。

答案 2 :(得分:1)

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)

答案 3 :(得分:1)

使用IN子句可能是最好的方法,正如czuroski所回答的,在你的语句中使用AND子句的问题是记录必须在一个记录中同时包含两个ctrl_numbers,所以0个记录将返回而不是更新将完成(并且没有错误)...除了IN语句,您可以使用OR子句,它将是:

... WHERE(CTRL_NUMBER = 54252 OR CTRL_NUMBER = 58334)

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