oracle - UPDATE SQL:如何在同一行上多次更新

时间:2014-11-18 19:27:05

标签: oracle sql-update sql-delete

我需要在删除之前更新几本书的数量。 使用此代码进行删除(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.  

我希望你能帮助我。感谢

2 个答案:

答案 0 :(得分:2)

你可以试试这个:

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)";  

答案 1 :(得分:1)

您的意思是,如果一本书在购物车中三次,它应该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)