MySQL «Not IN» запросил внезапное прекращение возврата результатов

Я делаю SELECT * FROM db1 . запись, где entry_id не в ( выберите entry_id из db2 . content ) g некоторые работы для сайта в среде общего хостинга, у которой есть история изменения настроек на нас. На этой неделе скрипт обновления внезапно прекратил работу, и основная причина заключается в том, что предложение NOT IN, которое использовалось для возврата результатов, больше не делает этого.

По сути, запрос заключается в следующем:

SELECT  *
FROM db1.entry 
order by entry_id desc

SELECT  *
FROM db2.content
order by entry_id desc

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

NULL

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

И, конечно же, он по-прежнему отлично работает на моей dev-боксе.

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

Благодарю.

php,mysql,

1

Ответов: 2


5 принят

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

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

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


1

вы, вероятно, имеете значение NULL, по крайней мере, в одной строке для entry_id вместо LEFT JOIN или NOT EXISTS

PHP, MySQL,
Похожие вопросы
Яндекс.Метрика