Условное удаление строк в MySQL База данных - PullRequest
1 голос
/ 21 апреля 2020

У меня есть база данных, которая регулярно обновляется путем добавления новых данных. После этого обновления каждая строка с timestamp старше текущей timestamp удаляется. Например:

DELETE FROM myTable WHERE timestamp < ?, где ? - текущий timestamp

Теперь я хотел бы расширить этот оператор, чтобы он удалял только старые строки, если на самом деле есть новые строки с timestamp >= ?. Можно ли сделать такое условное удаление в SQL?

1 Ответ

2 голосов
/ 21 апреля 2020

Вы можете сделать это:

DELETE FROM myTable
WHERE timestamp < ?
AND EXISTS (
  SELECT *
  FROM (
    SELECT 1
    FROM myTable
    WHERE timestamp >= ? 
  ) t
)

Требуется дополнительная вложенность (SELECT * FROM (...) t), потому что в MySQL (по крайней мере, до 8.0.19) в противном случае вы получите ошибку:

Вы не можете указать целевую таблицу 'myTable' для обновления в предложении FROM

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...