Я ожидаю, что результат третьего запроса ниже содержит id = 732. Это не так. Почему это?MySQL SELECT x FROM WHERE NOT IN (SELECT x FROM b) - Неожиданный результат
mysql> SELECT id FROM match ORDER BY id DESC LIMIT 5 ; +------------+ | id | +------------+ | 732 | | 730 | | 655 | | 458 | | 456 | +------------+ 5 rows in set (0.00 sec) mysql> SELECT id FROM email ORDER BY id DESC LIMIT 5 ; +------------+ | id | +------------+ | 731 | | 727 | | 725 | | 724 | | 723 | +------------+ 5 rows in set (0.00 sec) mysql> SELECT * FROM match WHERE id NOT IN (SELECT id FROM email) ; Empty set (0.00 sec)
В таблице email.id есть три записи NULL, а в match.id нет записей NULL.
Полный стол/запросы можно увидеть на http://pastebin.ca/1462094
Это случай OP? Мое понимание заключалось в том, что «если совпадение не найдено и одно из выражений в списке равно NULL», это не так, так как 732 должно быть найдено, тем самым недействительным это предложение, правильно? – Eric
@ Эрик: 732 не найден в письмах. – Quassnoi
@Quassnoi: Вы правы, пробел в мозге :) – Eric