mysql> show columns in m like 'fld';
+-------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| fld | varchar(45) | YES | MUL | NULL | |
+-------+-------------+------+-----+---------+-------+
1 row in set (0.02 sec)
mysql> show columns in i like 'fld';
+-------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| fld | varchar(45) | YES | MUL | NULL | |
+-------+-------------+------+-----+---------+-------+
1 row in set (0.02 sec)
mysql> select count(distinct fld) from i;
+---------------------+
| count(distinct fld) |
+---------------------+
| 27988 |
+---------------------+
1 row in set (0.03 sec)
mysql> select count(distinct fld) from m;
+---------------------+
| count(distinct fld) |
+---------------------+
| 72558 |
+---------------------+
1 row in set (0.07 sec)
Приведенные выше результаты кажутся разумными на основе того, что я знаю о рассматриваемых таблицах.
mysql> select count(*) from m where fld not in (select fld from i);
+----------+
| count(*) |
+----------+
| 0 |
+----------+
1 row in set (0.11 sec)
Последний результат не кажется разумным. Должно быть несколько строк в m
, где fld
не в i
! Может кто-нибудь объяснить, почему я получаю 0
в результате?
Для полноты (поскольку я подозреваю, что это может быть актуально) я также вставлю этот результат:
mysql> select count(*) from m where fld is null;
+----------+
| count(*) |
+----------+
| 0 |
+----------+
1 row in set (0.00 sec)
Изменить: отвечая на комментарии, я также редактирую следующую информацию, если это поможет кому-то ответить на мой вопрос:
select count(*) from m join i using (fld)
дает 9350; сleft join
, 73087; сright join
, 28872.select count(*) from i where fld is null
дает 810.