【问题标题】:Update multipe records of table with composite primary key from select从选择中更新具有复合主键的表的多条记录
【发布时间】:2022-03-31 20:36:16
【问题描述】:

我的表结构如下:

  • 4 列(A 列、B 列、C 列、D 列)
  • 以 3 列(columnA、columnB、columnC)作为主键。

除了使用 for 循环之外,我如何更新多行?

我正在寻找类似的东西:

UPDATE table 
SET columnC = 'something' 
WHERE (columnA,columnB,columnC) IN (
    SELECT columnA,columnB,columnC 
    FROM table 
    WHERE columnD = 'somethingD'
);

请注意,我正在尝试更新属于主键的列。**

【问题讨论】:

  • 你试过你的代码了吗?它应该可以工作。
  • 由于一个非常奇怪的原因,我第一次这样做时它不起作用。但实际上它工作正常,也许我错过了一些东西,感谢您花时间回答。
  • 如果您尝试以违反主键约束的方式进行更新,它将无法正常工作。 (或您的列上可能存在的唯一或检查约束等)但否则它应该起作用。
  • 您的查询应该可以工作,但是如果您可以使用业务逻辑重新访问您的实现,那就太好了。因为在生产环境中更新表的主键是不好的。它可能会给您带来频繁的约束违规错误

标签: sql oracle


【解决方案1】:
 UPDATE <tablename>
SET    columnc = 'something'
WHERE  columnd = 'somethingD'; 

如果您在表的多行的 columnD 中具有相同的值,则此查询应该有效,并且是的,您可以更新作为复合主键一部分的列,直到您更新的值不违反复合主键的唯一约束。

【讨论】:

    猜你喜欢
    • 2012-08-16
    • 1970-01-01
    • 2013-09-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-14
    • 2013-05-29
    • 1970-01-01
    相关资源
    最近更新 更多