Задавайте вопросы, мы ответим
Вы не зашли.
Страниц: 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