Альтернатива использованию ключевого слова LIMIT в SubQuery в MYSQL

У меня есть таблица TEST со следующими столбцами: code_ver (VARCHAR) люкс (VARCHAR) дата (DATE)

Теперь я хочу выбрать 10 строк с отличным значением code_ver и code_ver NOT LIKE '% DevBld%', отсортированным по дате desc.

Итак, я написал следующий запрос:

select * 
  from test 
 where code_ver IN (select DISTINCT code_ver 
                      from test 
                     where code_ver NOT LIKE '%DevBld%' 
                     ORDER by date DESC LIMIT 10);

Этот вопрос должен идеально работать, но моя версия MySQL говорит: эта версия MySQL еще не поддерживает "LIMIT и IN/ALL/ANY/SOME subquery"

Может ли кто-нибудь предложить мне альтернативу этому запросу?

Ответ 1

Ошибка, которую вы получаете, не совсем из-за версии MySQL. Я думаю, что все версии поддерживают это. Вы должны изменить место LIMIT 10 и поместить его после ")". Дайте мне знать, если это сработает для вас. Я запустил рев один на мой, и он работает.

например.

SELECT * FROM test where name IN (
           SELECT DISTINCT name 
           FROM projects 
           WHERE name NOT LIKE "%DevBld%"  
           ORDER by date_created DESC
 ) LIMIT 10;

Обновление: попробуйте один ниже, таким образом, порядок будет работать:

 SELECT * FROM  automation.e2e_projects WHERE name IN (
       SELECT DISTINCT name 
       FROM automation.e2e_projects
       WHERE name NOT LIKE "%DevBld%"
 ) ORDER by date_created DESC LIMIT 10;

Ответ 2

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

Так как mysql еще не поддерживает ограничение в подзапросе, вместо этого вы можете использовать JOIN следующим образом:

       SELECT * 
              FROM test JOIN (select DISTINCT code_ver 
                      from test 
                     where code_ver NOT LIKE '%DevBld%' 
                     ORDER by date DESC LIMIT 10) d
              ON test.code_ver IN (d.code_ver) ORDER BY xyz;

Ответ 3

Поместите подзапрос в производную таблицу:

   SELECT test.*
     FROM test
LEFT JOIN (SELECT DISTINCT code_ver
             FROM mastertest
            WHERE code_ver NOT LIKE '%DevBld%'
            ORDER BY `date` DESC
            LIMIT 10) d
    USING (code_ver)
    WHERE d.code_ver IS NOT NULL;

(Вы также можете ПРАВИЛЬНО ПРИСОЕДИНЯТЬ, что, конечно, и отказаться от внешнего условия WHERE.)