如何删除未通过sqlite约束的行?
我有一张这样的桌子:如何删除未通过sqlite约束的行?,sql,sqlite,Sql,Sqlite,我有一张这样的桌子: 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 comp
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
时删除该行,因为订单现在为空。如何做到这一点?我建议删除行,根据复杂子句,在执行更新之前,使用和数量<2
e、 g.(其中,user\u id=1
表示复杂的子句)
如果存在订单,则删除表格;
如果不存在订单,则创建表(用户id整数、订单id整数、数量整数、检查(数量>0));
在订单中插入值(1,1,10)、(1,2,1)、(1,3,2)、(2,1,3)、(2,2,2)、(2,3,5);
从订单中选择*;
从用户id=1且数量小于2的订单中删除;
更新订单集数量=数量-1,其中用户id=1;
从订单中选择*;
结果(完成任何操作之前的所有行):-
然后:-
i、 e.订单1和订单3已更新,订单2(在上面圈出)已删除 您可以暂时禁用检查(通过忽略检查\u约束
pragma),执行更新,删除列为0的行,然后重新启用检查好的,非常感谢。我最后写了这样的东西(除了我有“数量=1”而不是“数量<2”,因为支票保证它不能为零或更少)。我在这里写下了我最初的问题,因为我认为可能有某种方法可以在一个SQL查询中实现,但如果没有,那就这样吧。谢谢
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;