У меня есть log
таблицу следующим образом:удалять строки в PostgreSQL
id status1 status2 ref dateofchange
1 10 12 33 1.1.10
2 10 12 34 1.1.15
3 5 8 14 1.5.10
4 10 12 33 2.1.10
и другая таблица tab
следующим образом:
id ref qty commitdate
1 17 5 1.1.10
2 33 8 1.1.10
3 34 7 1.12.14
4 34 8 1.2.16
5 34 8 1.1.15
У меня есть запрос, который дает мне строки из log
таблицы:
select *
from log
where status1=10 and status2=12
это дает:
id status1 status2 ref dateofchange
1 10 12 33 1.1.10
2 10 12 34 1.1.15
4 10 12 33 2.1.10
Для каждой из этих строк, я хочу, чтобы удалить все строки из вкладки, где log.ref=tab.ref and tab.commitdate<=log.dateofchange
после вкладки удаления таблица должна выглядеть следующим образом:
id ref qty commitdate
1 17 5 1.1.10
4 34 8 1.2.16
я пытался сделать это с WITH запроса:
With l as (
select *
from log
where status1=10 and status2=12
)
delete from tab where l.ref=tab.ref and tab.commitdate<=l.dateofchange
Однако это не работает.
ERROR: missing FROM-clause entry for table "l"
Как я могу это сделать?
Я не понимаю связанный с ним подзапрос. Я не хочу удалять все из вкладки ... Я хочу удалить только строки, где ссылка совпадает с датой, чем дата, записанная в таблице журналов. – java
@java: это оператор 'exist' в предложении' where'. Оператор не удаляет все строки в 'tab' - только те, где существует строка в подзапросе (отсюда и название). –
Но как он проверяет даты? даты не обязательно совпадают. – java