Как найти последнюю строку, которая запустила NULLIF () или имеет ноль в mysql? - PullRequest
0 голосов
/ 04 мая 2020

В настоящее время я запускаю эту операцию для преобразования пустых строк в ноль. Есть какой-нибудь способ узнать последнюю строку, которая прошла через операцию NULLIF () или имеет нулевой символ, чтобы я мог обработать все с этой точки. В моей таблице есть столбец меток времени. У меня 150 столбцов, таких как recovery_email, и я хотел бы начать с последней найденной пустой строки в любом из них.

UPDATE table                                                                                                 
    SET recovery_email = NULLIF(recovery_email, ''), # There are 150 columns like recovery_email.
    email = NULLIF(email, ''),
    WHERE timestamp >= (NOW() - INTERVAL 1 DAY)   

Ответы [ 2 ]

0 голосов
/ 04 мая 2020

Если ни один из ваших recovery_email не равен null до выполнения запроса update, вы можете выполнить следующий запрос после оператора update, чтобы получить timestamp последней обновленной строки:

select max(timestamp) last_timestamp 
from mytable 
where recovery_email is null and timestamp >= now() - interval 1 day

В противном случае вам необходимо вычислить последнее значение до update, используя следующий запрос:

select max(timestamp) last_timestamp 
from mytable 
where recovery_email = '' and timestamp >= now() - interval 1 day
0 голосов
/ 04 мая 2020

Это ответ на оригинальную версию вопроса.

Зачем вам использовать NULLIF()? Просто отфильтруйте нужные строки:

UPDATE table                                                                                                 
    SET recovery_email = NULL                                
    WHERE timestamp >= (NOW() - INTERVAL 1 DAY) AND recovery_email = '';

Вы можете поставить индекс на recovery_email и не беспокоиться о попытках фильтрации по времени.

Или, что еще лучше, определили столбец с ограничением check (в самых последних версиях MySQL), поэтому пустые строки не допускаются.

...