PostgreSQL | Как удалить несколько записей одной командой DELETE по вариантам значения одного столбца?

PostgreSQL | Как удалить несколько записей одной командой DELETE по вариантам значения одного столбца?

Как коротко записать удаление записей таблицы с определёнными идентификаторами, чтобы не расписывать 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;

 

Вид таблицы ДО удалений по списку:

Таблица из семи значений в PostgreSQL
Таблица из семи значений в PostgreSQL

Делаем удаление записей по списку значений:

DELETE FROM test.rrr WHERE id IN (4, 5);

Результат:

Успешно удалили записи из таблицы по списку значений одного столбца в PostgreSQL
Успешно удалили записи из таблицы по списку значений одного столбца в PostgreSQL

 

Удаление осуществилось как мы этого и ожидали.

Самое главное, что мы не городили длинную запись условий 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-оболочки pgAdminhttps://www.pgadmin.org

Официальный сайт СУБД PostgreSQLhttps://www.postgresql.org