| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Составление SQL-запросов > Сложный запрос - проще показать, чем объяснить :) |
| Автор: PashaLost 5.7.2012, 23:32 |
| Добры день, Господа ! Подскажите, как составить SELECT-запрос (именно запроc, а не что-нибудь другое) из следующей структуры таблиц БД: 1) Имеем: Таблицу Games - хранит информацию об игре. Таблицу Rounds - (одной игре соответствует несклолько раундов) хранит информацию о раундах Таблицу Cards - (одному раунду соответствует несколько карт) хранит информацию о картах 2) Необходимо: Написать ОДИН SELECT запрос, который выведет информацию из трёх таблиц в одну ТАК, чтобы в первом стобце размещалась информация об игре, во втором столбце размещалась информация о ПЕРВОМ раунде игры, в следующем - информация о всех картах ПЕРВОГО раунда, следующем информация о ВТОРОМ раунде и т.д. НАДЕЮСЬ, суть вопроса прояснится больше из картинки ниже Проблему можно решить с помощью временной таблицы, пробежаться курсором по всем записям и бла бла бла но это ОЧЕНЬ медленно, и каждый раз нужно очищать и записывать в таблицу - а если записей несколько тысяч - тогда вообще кирдык. А подготовленный запрос бы с этим справился. ![]() |
| Автор: Gluttton 5.7.2012, 23:40 |
| Колличество столбцов с Round и Cards переменное или всегда равно 4? |
| Автор: PashaLost 6.7.2012, 01:10 |
| Количество столбцов всегда одинаково (раундов всегда 4), однако самих раундов всех 4 в одной игре может не существовать (тогда записывать NULL), количество карт во втором раунде - 3 (всех их нужно запихивать в одну ячейку функцией GROUP_CONCAT) в других по одной (но это не важно что одна - нужно всё равно суммировать все имеющиеся в одном раунде) |
| Автор: Gluttton 6.7.2012, 01:19 | ||||
| К сожалению нет под рукою SQL-сервера и я не погу проверить предлагаемое решение... Суть в следующием: С таблицей Games производить LEFT JOIN вот таких вот подапросов:
Т.е. что то вроде такого:
|
| Автор: Gluttton 6.7.2012, 11:45 | ||||||
| Решение для Firebird 2.5. Скрипт для создания БД, таблиц, первиных и вторичных ключей, а так же заполнения тестовыми данными.
Запрос:
Результат.
Но назвать решение изящным язык не аж никак не поварачивается... |
| Автор: PashaLost 9.7.2012, 00:53 |
| Спасибо Gluttton, потребовалось немного времени, чтобы скореллировать вашу идею на реальный проект бд (не тот что в примере), и оно таки заработало ! |
| Автор: Gluttton 9.7.2012, 12:13 |
Пожалуйста! Это и есть для меня самый большой "+" ;) . |