Перекрестные
соединения
207
Хотя эта таблица является именно тем, что требовалось для разделения
клиентов на три группы на основании их
совокупного остатка на счете,
эта стратегия слияния однострочных таблиц с помощью оператора
union
all
не очень подходит, если требуется соорудить большую таблицу.
Например,
требуется создать запрос, формирующий строку для каж
дого дня 2004 года, но в БД нет таблицы,
содержащей строки для всех
дней. Используя стратегию из примера главы 9, можно было бы сде
лать чтото вроде этого:
SELECT '20040101' dt
UNION ALL
SELECT '20040102' dt
UNION ALL
SELECT '20040103' dt
UNION ALL
...
...
...
SELECT '20041229' dt
UNION ALL
SELECT '20041230' dt
UNION ALL
SELECT '20041231' dt
Создавать запрос, соединяющий результаты 366 запросов,
немного уто
мительно, поэтому, наверное, нужна другая стратегия. Что если сгене
рировать таблицу с 366 строками (2004 год был високосным) и
одним
столбцом, содержащим число от 0 до 366, и затем добавлять это число
дней к 1 января 2004? Вот одна из возможных методик формирования
подобной таблицы:
mysql>
SELECT ones.num + tens.num + hundreds.num
> FROM
> (SELECT 0 num UNION ALL
> SELECT 1 num UNION ALL
Достарыңызбен бөлісу: