Как удалить строки, которые не соответствуют ограничениям sqlite? - PullRequest
0 голосов
/ 12 декабря 2018

У меня есть таблица, которая выглядит следующим образом:

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, потому что заказ теперь пуст.Как я могу это сделать?

1 Ответ

0 голосов
/ 12 декабря 2018

Я бы предложил удалить строки в соответствии с 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;

приводит к (все строки, прежде чем что-либо сделано): -

enter image description here

, а затем: -

enter image description here

т.е. заказы 1 и 3 были обновлены, а заказ 2 (обведен выше) был удален.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...