Можно обобщить паттерн. Частенько возникают подобного рода задачи. Проблема заключается в том, что из БД нельзя выбрать данных, которых там нет. Решение - иметь под рукой таблицу с номерами от 1 до N. N зависит от потребностей. И джойнить ее.
Можно решать кучу задач. Например, вывод непрерывных всяких последовательностей. Или вывести пробелы в auto_increment.
Или, скажем, есть у нас таблица а-ля лог какой-нибудь. Нужно вывести кол-во с группировкой по месяцам. Вот если за какой-то месяц нужно вывести ноль (не было записей), то просто группировка не выведет ничего. А нужен ноль. Поможет опять же волшебная табличка с номерами
Паттерн хороший и красивый. Обычно те, кто с ним не знакомы - делают циклы на клиенте.
Есть еще альтернатива джойнить что-то вида (SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 ........). Если эту штуку пару раз заCROSSJOIN-ить на себя, можно получить довольно большой набор номеров
-~{}~ 24.11.06 13:00:
Поясняю последнюю мысль, может и на паттерн потянет
Вот такой имелся в виду запрос. Копирайт не мой, взято где-то на форумах sql.ru.
select a*1000+b*100+c*10+d num from
(select 0 a union select 1 union select 2 union select 3 union select 4
union select 5 union select 6 union select 7 union select 8 union select 9) a
cross join
(select 0 b union select 1 union select 2 union select 3 union select 4
union select 5 union select 6 union select 7 union select 8 union select 9) b
cross join
(select 0 c union select 1 union select 2 union select 3 union select 4
union select 5 union select 6 union select 7 union select 8 union select 9) c
cross join
(select 0 d union select 1 union select 2 union select 3 union select 4
union select 5 union select 6 union select 7 union select 8 union select 9) d