2013-09-13 4 views
1

У меня есть таблица InnoDB со столбцом, называемым статусом. Это может быть заполнено либо «succes», либо «special», либо с NULL, когда код выполнял исключение.null значение не найдено в базе данных

У меня есть cronjob, который смотрит на эту таблицу и пытается обработать строки со статусом, отличным от «succes» или «special». Я заметил, однако, что это не сработает.

Так переспросила я таблицу с помощью следующего запроса:!

SELECT * FROM master_innodb.some_table WHERE status = 'Сукчес' И status = 'специальный';

Он возвращает 0 строк.

Когда я изменил строку, которую я ожидал, что она вернется из состояния NULL в пустое поле, запрос вернул эту строку.

Может кто-нибудь объяснить это?

С уважением,

Matthijs

ответ

1

Так что я думаю, думаю, вы могли бы сделать с пониманием немного больше о том, что значение NULL представляет в базе данных MySQL. NULL может быть запутанным зверем в лучшие времена. От MySQL docs:

Значение NULL может быть неожиданным, пока вы не привыкнете к нему. Концептуально, NULL означает «недостающее неизвестное значение» и обрабатывается несколько иначе, чем другие значения.

Таким образом, NULL в значительной степени означает «отсутствие данных». Поэтому, когда вы указываете предикат:

status != 'success' AND status != 'special' 

Тогда строки с NULL в столбце status не возвращается, потому что мы не знаем, является ли строка с NULL status равно «Succes» или равно к «специальному». Следовательно, он не возвращается.

Вы могли бы попробовать это вместо ГЭТ строки для повторной обработки в вашей хрон:

SELECT * FROM master_innodb.some_table WHERE status is null; 
Смежные вопросы