|
довольно сложный запрос DB2 + JDBC
|
|||
---|---|---|---|
#18+
___________школа 1___школа 2 Математика_____5________11 Русский________6________12 Физика_________0________13 условия такие: есть предметы, есть школы школы привязаны к предметам (многие ко многим) есть ученики - привязаны к школам (многие ко многим) и к предметам(многие ко многим) (ограничений никаких нет - 1 ученик может учить разные предметы в разных школах) числа - это количество учеников изучающих данный предмет в данной школе нужно получить данные из базы (по JDBC) и вывести их на страничке варианты: 1) сначала выбираем все школы (id, name), затем все предметы (id, name) потом для каждой школы для каждого предмета считаем число учеников минусы: СЛИШКОМ МНОГО обращений к базе 2) получить данные вот в таком виде: idSchool idSubject COUNT 1________1________5 1________2________6 1________3________0 2________1________11 2________2________12 2 ________3________13 разобрать их на Java проблем нет НО я не могу написать такой запрос: если делать внутренне объединение то выведутся не все строчки если делать внешнее с таблицей учеников (т.е. с таблицей связей к ним), то получится что COUNT считает поля с NULL а DB2 так устроен что выдается ВОРНИНГ если в агрегатную функцию попадает NULL - этого хотелось бы избежать если делать внешнее с подзапросом выводящем COUNT, то с COUNT проблем не возникает но мне тогда получается нужно привязать таблицу учеников к школам и к предметам а в ON можно указать только одну связь собсна сам вопрос: как лучше поступить в такой ситуации?? ... |
|||
:
Нравится:
Не нравится:
|
|||
03.12.2004, 16:54 |
|
довольно сложный запрос DB2 + JDBC
|
|||
---|---|---|---|
#18+
Насколько понял, таблицы примерно: Код: plaintext 1. 2. 3. 4.
И тогда запрос: Код: plaintext 1. 2. 3. 4.
Верно? ... |
|||
:
Нравится:
Не нравится:
|
|||
06.12.2004, 09:28 |
|
довольно сложный запрос DB2 + JDBC
|
|||
---|---|---|---|
#18+
О! Спасибо!!! я и не знал что в лефт дждойне можно указать два поля связки :( я правда уже по другому сделал но все равно спасибо кстати, ваш вариант можно сделать так: только я не знаю что вместо вопросиков подставить, должно быть IF NULL 1 ELSE 0 в оракле было бы: DECODE(Q2.PEOPLE, NULL, 1, 0) Код: plaintext 1. 2. 3. 4. 5.
а вообще наверна даже лучше так: вместо вопросиков нужно заменить NULL на 0 а остальные на 1 в оракле было бы: DECODE(Q2.PEOPLE, NULL, 0, 1) Код: plaintext 1. 2. 3. 4. 5.
... |
|||
:
Нравится:
Не нравится:
|
|||
07.12.2004, 14:42 |
|
|
start [/forum/topic.php?fid=43&fpage=150&tid=1606082]: |
0ms |
get settings: |
11ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
57ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
40ms |
get tp. blocked users: |
1ms |
others: | 279ms |
total: | 419ms |
0 / 0 |