X

MySQL doesn't yet support subquery

Столкнулся с задачей выполнить LIMIT в подзапросе, но это привело к ошибке: Error: #1235 - This version of MySQL doesn't yet support 'LIMIT & IN/ALL/ANY/SOME subquery'. Неужели нет способа это сделать? Оказывается есть..

Исходный запрос:

SELECT DISTINCT `post_id` FROM `wp_postmeta` WHERE `post_id` IN ( 
  SELECT `ID` FROM `wp_posts` ORDER BY `ID` DESC LIMIT 50
) AND `meta_value` LIKE "http://site.com/%" LIMIT 10

приводит к ошибке:#1235 - This version of MySQL doesn't yet support 'LIMIT & IN/ALL/ANY/SOME subquery'

Для того, чтобы запрос отработал, нам необходимо обернуть подзапрос в ещё один SELECT и вернуть результат подзапроса в виде переменной, вот так:

SELECT DISTINCT `post_id` FROM `wp_postmeta` WHERE `post_id` IN ( 
 SELECT * FROM (
  SELECT `ID` FROM `wp_posts` ORDER BY `ID` DESC LIMIT 50
 ) as `id`
) AND `meta_value` LIKE "http://site.com/%" LIMIT 10

теперь все работает.

Категории: MySQL Базы данных

Комментарии (2)

  • братан ты спаситель. 6 часов решал уравнение по группировке и выдачи и в итоге нашел решение. может кто столкнется с подобным:
    Заказы пользователей Интернет магазина, один ордер на группу товаров

    id id_user id_product order
    40 7 154 24600048030817
    39 7 153 24600048030817
    38 7 143 1245048030817
    37 7 123 2540048030817

    Нужно сформировать запрос по номеру заказа и ограничить количество записей, но что бы в результат попадали записи всего заказа

    SELECT * FROM `_diamondcms_shop_order` WHERE `order` IN (
    SELECT * FROM (
    SELECT `order` FROM `_diamondcms_shop_order` GROUP BY `order` LIMIT 2
    ) as `order`
    )
    AND `id_user`='7' ORDER BY CAST(`id` as unsigned) DESC

    Спасибо!