MySQL "Not IN" запрос внезапно перестал возвращать результаты - PullRequest
1 голос
/ 17 июня 2009

Я делаю некоторую работу для сайта в среде общего хостинга, у которого есть история изменения настроек на нас. На этой неделе сценарий обновления неожиданно перестал работать, и основная причина заключается в том, что предложение NOT IN, которое использовалось для возврата результатов, больше не выполняется.

Запрос, по сути, таков:

SELECT  *
FROM db1.entry
where entry_id not in
(
  select entry_id from db2.content
)

Я могу убедиться, что действительно есть записи, которые должны быть возвращены, проверяя две таблицы напрямую. При выполнении следующих двух запросов первый возвращает entry_ids, а второй - нет:

SELECT  *
FROM db1.entry 
order by entry_id desc

SELECT  *
FROM db2.content
order by entry_id desc

И, повторюсь, все это работало правильно в течение нескольких месяцев. Не было внесено никаких изменений в код, но возможно, что настройки MySQL были изменены по пути. Также возможно, что что-то изменилось в среде PHP, но это кажется менее вероятным, поскольку рассматриваемый запрос не выполняется точно так же при запуске из phpMyAdmin, как при запуске с живого сайта.

И, конечно, он все еще отлично работает на моем устройстве разработчика.

Живой сайт работает под управлением MySQL версии 4.1.11. Мой вопрос: кто-нибудь знает настройку MySQL для этой версии, которая изменит способ работы этих запросов NOT IN?

Спасибо.

Ответы [ 2 ]

5 голосов
/ 17 июня 2009

Убедитесь, что ваш внутренний запрос не возвращает NULL.

Из документации :

Для соответствия стандарту SQL, IN возвращает NULL не только, если выражение слева NULL, но также если не найдено совпадений в списке и одном из выражений в список NULL.

1 голос
/ 17 июня 2009

у вас, вероятно, есть значение NULL хотя бы в одной строке для entry_id используйте левое соединение или не существует вместо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...