我有一个看起来像这样的表:
orders (
user_id INTEGER
item_id INTEGER
quantity INTEGER
... (more columns and constraints)
CHECK(quantity > 0)
)
我想将订单数量减少一,如果将数量减少为零,则将其删除。
是否可以在一项声明中做到这一点?
现在我有:
UPDATE orders SET quantity = quantity - 1 WHERE *blah blah complicated clause*
但是,当数量为1
时,此操作将失败,并将数量保留在1
,因为将其设置为0
会导致约束错误。
我希望它只是在数量为1
时删除该行,因为该订单现在为空。我该怎么办?
答案 0 :(得分:2)
我建议根据complicated clause
和 AND quantity < 2
之前删除行,以进行 UPDATE
例如(其中user_id = 1
表示复杂的子句)
DROP TABLE IF EXISTS orders;
CREATE TABLE IF NOT EXISTS orders (user_id INTEGER, order_id INTEGER, quantity INTEGER, CHECK(quantity > 0) );
INSERT INTO orders VALUES (1,1,10),(1,2,1),(1,3,2),(2,1,3),(2,2,2),(2,3,5);
SELECT * FROM orders;
DELETE FROM orders WHERE user_id = 1 AND quantity < 2;
UPDATE orders SET quantity = quantity -1 WHERE user_id = 1;
SELECT * FROM orders;
结果(所有行完成之前的所有行):-
然后::-
即订单1和3已更新,而订单2(上面有圆圈)已删除。