我正在使用 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}}?
谢谢你的时间!
答案 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来满足多个要求。