Зачем мне нужно «OR NULL» в MySQL при подсчете строк с условием

Есть вопрос об агрегатной функции MySQL COUNT (), который время от времени возникает у меня в голове. Я хотел бы получить объяснение, почему он работает именно так.

Когда я начал работать с MySQL, я быстро понял, что его COUNT (условие), кажется, работает правильно, только если условие также содержит в конце OR NULL. В случае более сложных условий COUNT выяснение того, где именно его поставить, было эмпирическим процессом. В MSSQL вам не нужно это OR NULL для получения правильных результатов, поэтому я хотел бы знать его объяснение. Итак, вот пример.

Давайте иметь очень простую таблицу со следующей структурой и данными:

CREATE TABLE test (
  `value` int(11) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

INSERT INTO test (value) VALUES(1);
INSERT INTO test (value) VALUES(4);
INSERT INTO test (value) VALUES(5);
INSERT INTO test (value) VALUES(6);
INSERT INTO test (value) VALUES(4);
INSERT INTO test (value) VALUES(4);
INSERT INTO test (value) VALUES(5);
INSERT INTO test (value) VALUES(2);
INSERT INTO test (value) VALUES(8);
INSERT INTO test (value) VALUES(1);

Сценарий: я хотел бы подсчитать, сколько строк у меня есть, где значение = 4. Очевидным решением было бы отфильтруйте его с помощью WHERE и сделайте COUNT (*), но меня интересует решение на основе COUNT (условие).

Итак, решение, которое приходит мне в голову:

SELECT COUNT(value=4) 
  FROM test

Результат - 10. Это явно неверно.

Вторая попытка с OR NULL:

SELECT COUNT(value=4 OR NULL) 
  FROM test

Результат - 3. Это верно.

Кто-нибудь может объяснить логику этого? Это какая-то ошибка MySQL или есть логическое объяснение, почему мне нужно добавить это странно выглядящее OR NULL в конец условия COUNT, чтобы получить правильный результат?

5
задан CodeTwice 16 February 2011 в 00:39
поделиться