Удаление записей в таблице
У меня есть таблица table1, у которое есть столбец field1(bigint[])
У меня есть вторая таблица table, у которой есть поле id
Я бы хотел сделать такой запрос, который берет поочередно все строки из первой таблицы. К примеру, взяли строку со значением:
[1001, 1005]
Во второй таблице у меня могут быть записи такие
1001
2001
2321
1005
Я бы хотел оставить запись с минимальным значением из взятого массива первой таблицы. Т.е из [1001, 1005], я оставляю 1001, а все записи с 1005 - удаляю. И должно получиться:
1001
2001
2321
Я думал, что это делается примерно так, как мне посоветовали делать с оператором UPDATE. Но это не работает.
DELETE FROM table2
FROM (
SELECT (SELECT min(x) FROM unnest(field1)as x) min_val,
unnest(field1) val
FROM table1
) q
WHERE id <> min_val and id = val;
Ответы (1 шт):
Экстенсивно:
DELETE
FROM table2
USING ( SELECT separate_values.value, ROW_NUMBER() OVER (PARTITION BY table1.fiedl1) rn
FROM table1
CROSS JOIN UNNEST(table1.fiedl1) AS separate_values (value) ) AS criteria
WHERE id = criteria.value
AND criteria.rn > 1;
https://dbfiddle.uk/?rdbms=postgres_12&fiddle=c9d597d071609dc6b822cc2f46f565e3
Если надо оставить не первый, а минимальный - добавьте соотв. ORDER BY в определение окна.