Как коротко записать удаление записей таблицы с определёнными идентификаторами, чтобы не расписывать OR?
Решение есть. И этот оператор называется IN.
Давайте для примера создадим тестовую таблицу:
— Удаление записей из таблицы через список значений условия
— без повторяющихся AND
— Создаём тестовую таблицу
CREATE TABLE test.rrr (
id bigint,
t bigint
);
— Вставляем условные данные
INSERT INTO test.rrr VALUES (1, 1), (2, 1),(3, 1),(4, 1),(5, 1),(6, 1),(7, 1);
— Смотрим на полную таблицу
SELECT * FROM test.rrr;
— Удаляем записи по списку значений идентификаторов
DELETE FROM test.rrr WHERE id IN (4, 5);
— Смотрим на уменьшенную таблицу
SELECT * FROM test.rrr;
— Очищаем записи для следующих тестов
TRUNCATE test.rrr;
Вид таблицы ДО удалений по списку:
Делаем удаление записей по списку значений:
DELETE FROM test.rrr WHERE id IN (4, 5);
Результат:
Удаление осуществилось как мы этого и ожидали.
Самое главное, что мы не городили длинную запись условий WHERE с использованием операторов OR.
Могло быть так:
DELETE FROM test.rrr WHERE id = 3 OR id = 6;
Такая SQL-команда выглядит длиннее и запутаннее. В такой команде повторяются текстовые значения.
Как удалить несколько записей одной командой DELETE по массиву со значениями для одного столбца?
Команда:
DELETE FROM test.rrr WHERE id IN (SELECT unnest(ARRAY[1,3,5]));
Нужно справа от IN добавить подзапрос, который вывернет массив в табличный вариант.
Информационные ссылки
Официальный сайт WEB-оболочки pgAdmin — https://www.pgadmin.org
Официальный сайт СУБД PostgreSQL — https://www.postgresql.org