Я бы предложил удалить строки в соответствии с complicated clause
с AND quantity < 2
до до выполнения ОБНОВЛЕНИЕ .
например (где 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 (обведен выше) был удален.