我需要在删除之前更新几本书的数量。 使用此代码进行删除(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.
我希望你能帮助我。感谢
答案 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)