postgreSQL: УДАЛИТЬ путем сопоставления данных строки - PullRequest
0 голосов
/ 05 марта 2020

У меня есть результаты оператора SELECT, который я хотел бы перевернуть и использовать для удаления соответствующих строк из другой таблицы с теми же данными. У меня нет подробных c подробностей из SELECT - только возвращенные строки.

Например, если у меня есть таблицы

table_1
name  | value
--------------
Bob   | 5
Ben   | 14
Bev   | 8


table_2
name  | value
--------------
Bob   | 5
Bill  | 2
Biff  | 4

И мне дают результаты SELECT из первой таблицы, которая возвращает строку Боба, как я могу использовать это для удаления Боба со второго стола?

Редактировать Чтобы уточнить, что я делаю, у меня есть скрипт, который просматривает несколько пар резервных / активных таблиц и находит строки, которые являются новыми и обновленными (это часть SELECT Мне дали - это журнал изменений). Теперь мне нужно удалить некоторые из этих новых строк, но мне нужно работать только с необработанными данными из журнала изменений и именем таблицы. Для вставок это не проблема:

INSERT INTO table_name <row data here>  -- Don't need column names

Я надеялся, что в DELETE был аналогичный способ удаления элементов без схемы путем сопоставления необработанных данных, аналогично тому, как работает предложение EXCEPT.

1 Ответ

1 голос
/ 05 марта 2020

Я думаю, что вы ищете что-то вроде этого:

DELETE FROM table_2 WHERE (name, value) IN (
    SELECT name, value FROM table_1
)

Это ищет и удаляет строки table_2, чьи name и value соответствуют (как минимум) строке из table_1.

Если у вас есть запрос, который дает список (name, value) кортежей для удаления, вы можете просто заменить подзапрос этим.

...