|  | 
Задавайте вопросы, мы ответим
Вы не зашли.
Страниц: 1

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

Есть еще решение - заменить IN на JOIN с нужным подзапросом.
Неактивен

JOIN это стандартное решение, я хотел найти другое.
Кстати, такой подход (вложенный подзапрос) позволяет обойти ограничение на невозможность одновременного обновления таблицы и выборки из неё в подзапросе.
Неактивен

vasya написал:
Кстати, такой подход (вложенный подзапрос) позволяет обойти ограничение на невозможность одновременного обновления таблицы и выборки из неё в подзапросе.
Это наверное бага - теряется смысл самого ограничения, если так можно. 
Насчет переменных - сделать с помощью них LIMIT нельзя без JOIN или еще одного вложенного подзапроса. А если есть JOIN или поздзапрос, то тогда уже есть решение проблемы.
Неактивен

rgbeast написал:
vasya написал:
Кстати, такой подход (вложенный подзапрос) позволяет обойти ограничение на невозможность одновременного обновления таблицы и выборки из неё в подзапросе.
Это наверное бага - теряется смысл самого ограничения, если так можно.
Нет, при этом подзапрос переходит в часть from и материализуется во временную таблицу.
UPDATE t ... WHERE col = (SELECT * FROM (SELECT ... FROM t...) AS _t ...);
Here the result from the subquery in the FROM clause is stored as a temporary table, so the relevant rows in t have already been selected by the time the update to t takes place. 
http://dev.mysql.com/doc/refman/5.5/en/ … tions.html
rgbeast написал:
Насчет переменных - сделать с помощью них LIMIT нельзя без JOIN или еще одного вложенного подзапроса. А если есть JOIN или поздзапрос, то тогда уже есть решение проблемы.
Была мысль сделать функциональность limit через условие в where, но не получилось.
Неактивен

vasya написал:
Была мысль сделать функциональность limit через условие в where, но не получилось.
Есть такая дикая идея, но в подзапрос это не встраивается.
Неактивен

rgbeast написал:
vasya написал:
Была мысль сделать функциональность limit через условие в where, но не получилось.
Есть такая дикая идея, но в подзапрос это не встраивается.
SET @cnt=0;select c2 from t2 where (select @cnt:=@cnt+1)<2 order by c2 asc;
Почему не встраивается ?
У меня вот получился такой вариант.
Неактивен

У меня не работает - возвращает пустое множество (MySQL 5.1.52)
Неактивен
Страниц: 1