Задать вопрос
wartur
@wartur

Как сделать SQL запрос создающий из поля таблицы с количеством равное количество строк?

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

Задача следущая. Есть такая таблица
id | count | name
1  | 4     | Павел
2  | 2     | Петя
3  | 3     | Боб


В резальтате некоторого запроса мне бы хотелось получить следующий результат. Прикол в том, что бы воспользоватся полем count и сделать количество строк равное количеству, указанному в этом поле
id | name
1  | Павел
1  | Павел
1  | Павел
1  | Павел
2  | Петя
2  | Петя
3  | Боб
3  | Боб
3  | Боб


Я умею джойнить, группировать туда сюда, знаю даже некоторые функции, но такая задача меня как-то опешила. Может быть я не знаю какой-нибудь функции?

Спасибо за внимание.
  • Вопрос задан
  • 2449 просмотров
Подписаться 2 Оценить 2 комментария
Решения вопроса 1
wartur
@wartur Автор вопроса
Значится так
Есть некая системная таблица с идентфикаторами 1..MAX_INT
Table "sysid"
id
1
2
3
4
...
1000
...
{MAX_INT}

Table "user"
id | count | name
1  | 4     | Павел
2  | 2     | Петя
3  | 3     | Боб


Производим следующий запрос
SELECT user.id, user.name
FROM user
LEFT JOIN sysid ON sysid.id <= user.count


Результат:
id | name
1  | Павел
1  | Павел
1  | Павел
1  | Павел
2  | Петя
2  | Петя
3  | Боб
3  | Боб
3  | Боб
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
Такое сойдет? =)))
SELECT t.* FROM table t
UNION SELECT t1.* FROM table t1 WHERE t1.count > 1
UNION SELECT t2.* FROM table t2 WHERE t2.count > 2
UNION SELECT t3.* FROM table t3 WHERE t3.count > 3
UNION SELECT t4.* FROM table t4 WHERE t4.count > 4
UNION SELECT t5.* FROM table t5 WHERE t5.count > 5
UNION SELECT t6.* FROM table t6 WHERE t6.count > 6
UNION SELECT t7.* FROM table t7 WHERE t7.count > 7
UNION SELECT t8.* FROM table t8 WHERE t8.count > 8
UNION SELECT t9.* FROM table t9 WHERE t9.count > 9
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы