Невозможное количество строк в MySQL

0

Я не знаю, как работает MySQL внутри, но я уверен, что есть некоторые проблемы с индексами или некоторая метаинформация о количестве таблиц:

mysql> select count(*) from Event;
+----------+
| count(*) |
+----------+
|     5925 |
+----------+
1 row in set (0,01 sec)

mysql> select count(*) from Event where event_id in (select discount_event_id from Discount);
+----------+
| count(*) |
+----------+
|     5901 |
+----------+
1 row in set (0,12 sec)

mysql> select count(*) from Event where event_id not in (select discount_event_id from Discount);
+----------+
| count(*) |
+----------+
|        0 |
+----------+
1 row in set (0,11 sec)

Эти 24 отсутствующих event_id не имеют смысла. Это просто логически невозможно с моей точки зрения. Не может быть 24 строк, которые есть и не находятся в другом наборе. Или они, или нет.

Кроме того, как следует из некоторых ответов и комментариев, отсутствуют NULL event_id, поскольку это rowid:

mysql> select count(*) from Event where event_id is null;
+----------+
| count(*) |
+----------+
|        0 |
+----------+

Что здесь происходит?

  • 2
    24 те, которые являются null
  • 0
    stackoverflow.com/questions/129077/…… (хотя это касается SQL Server, он, скорее всего, тоже подойдет)
Показать ещё 3 комментария
Теги:
count

1 ответ

2

Это означает, что 24 event_id имеют NULL

select count(*) from Event where event_id IS NULL

операторы in и not in возвращают NULL при сравнении со значением NULL, которое приводится к значению FALSE поэтому в обоих наборах результатов оно опущено.

  • 0
    NULL event_id не event_id так как это поле является строкой таблицы Event . Смотрите обновление по вопросу.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню