неожиданное поведение запроса mysql

#mysql

#mysql

Вопрос:

Рассмотрим следующий запрос:

 SELECT i.id  AS item_id, 
       i.name, 
       i.project_id, 
       iv.id AS variation_id, 
       iv.price 
FROM   items AS i 
JOIN items_variations AS iv ON iv.id = (
    SELECT ivv.id FROM items_variations AS ivv 
    JOIN items_pictures AS ip2 
        ON ip2.variation_id = ivv.id 
        AND (( ip2.thumb = 1 AND ip2.details = 1 AND ip2.visible = 1 AND ip2.format = 3 ) 
            OR ( ip2.cover = 1 AND ip2.details = 1 AND ip2.visible = 1 AND ip2.format = 3 ) ) 
        WHERE  ivv.item_id = i.id AND ivv.status = 1 
        ORDER  BY ivv.price ASC 
        LIMIT  1) 
WHERE  i.id = 60 
  

Он возвращает пустой набор. Если я удалю поле iv.price из предложения select, то будет возвращена одна строка.
Я довольно удивлен таким поведением, у вас есть какие-либо подсказки о ТОМ, ПОЧЕМУ это происходит?

В настоящее время я использую mysql версии 14.14, дистрибутив 5.5.28, для Linux (x86_64) с использованием readline 5.1

Комментарии:

1. @fancyPants удалить из обязательных полей.

2. извините, если я плохо объяснился, я имел в виду удалить из предложения select

3. Попробуйте перестроить индексы. Если ваши индексы повреждены, включение столбца может привести к выбору другого (поврежденного) индекса и, следовательно, не вернуть правильные данные. Я понятия не имею, может ли MySQL иметь поврежденные индексы или как их перестроить, но это единственная причина, которая дала бы такой эффект.

4. IDK, если это просто я в последнее время не так часто использовал MySQL, но ваш запрос выглядит необязательно сложным для того, чего вы пытаетесь достичь. Ваши две строки И / ИЛИ условия в соединении могут быть сокращены до AND ((ip2.thumb = 1 OR ip2.cover = 1) AND ip2.details = 1 AND ip2.visible = 1 AND ip2.format = 3) , например

5. @AeroX вы правы, это запрос, который я написал давным-давно, и сегодня мне пришлось использовать его снова через некоторое время … и я обнаружил, что это неприятный сюрприз. Я уверен, что могу переписать запрос, чтобы избежать проблемы, но мне было любопытно узнать причину этого