【问题标题】:oracle - UPDATE SQL: how to update several times the same lineoracle - UPDATE SQL:如何多次更新同一行
【发布时间】:2014-11-18 19:27:05
【问题描述】:

我需要更新几本书的数量,然后再删除它们。 使用此代码进行删除(oracle 有一个名为 ROWNUM 的隐藏列)

DELETE FROM project.cart WHERE isbn = ? and ROWNUM=1;    

一次删除一个 ISBN(表中有相等的 isbn)。但更新仅适用于一个 isbn。它应该为找到的所有 isbn 更新同一行数次。

String sql3= "UPDATE PROject.book SET quantity=quantity +1 WHERE project.book.isbn in "
     + "(SELECT project.cart.isbn FROM project.cart) ";     

// this code work perfectly, but for one time.  

我希望你能帮助我。谢谢

【问题讨论】:

    标签: oracle sql-update sql-delete


    【解决方案1】:

    你可以试试这个:

    String sql3= "UPDATE PROject.book SET quantity=quantity + " 
         + "(select count(*) FROM project.cart where project.cart.isbn = project.book.isbn) " 
         + " WHERE project.book.isbn in (SELECT project.cart.isbn FROM project.cart)";  
    

    【讨论】:

    • 返回无效的表名。如果我删除(“来自”一个来自)返回:缺少右括号
    • @neo999 抱歉,复制粘贴时有两个错别字
    【解决方案2】:

    您的意思是,如果一本书在购物车中出现了 3 次,那么它应该将 3 添加到其 quantity 列?

    如果是这样,您需要添加计数。当WHERE 逻辑包含一行时,它只包含一次,即使它匹配多个条件也是如此。尝试使用相关子查询:

    UPDATE book
    SET quantity = quantity + (SELECT COUNT(*) FROM cart WHERE book.isbn = cart.isbn)
    

    如果有很多 book 行,此查询将运行非常缓慢,因此您可能需要将原始 WHERE 子句添加到末尾以限制 book 行数:

    UPDATE book
    SET quantity = quantity + (SELECT COUNT(*) FROM cart WHERE book.isbn = cart.isbn)
    WHERE isbn IN (SELECT isbn FROM cart)
    

    【讨论】:

      猜你喜欢
      • 2023-03-20
      • 1970-01-01
      • 2016-06-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-13
      相关资源
      最近更新 更多