Гость
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / Можно ли упростить запрос? / 10 сообщений из 10, страница 1 из 1
05.05.2004, 18:51
    #32508026
riman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли упростить запрос?
Имеем 3 таблицы:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
table  1 
id     name
--    ------
 1      name1
 2      name2
 3      name3

table  2 
id    id2   amount2
--   ---   -----
 1       12     3 
 1       13     2 
 2       14     4 

table  3 
id    id3   amount3
--   ---   -----
 1      31      7 
 3      32      9 
Как можно сделать запрос, выводящий следующее:
Код: plaintext
1.
2.
3.
4.
5.
id     sum(amount2)       sum(amount3)
--    --------------       -------------
 1        5                           7 
 2        14                         0 
 3        0                           9 

я написал вот так:
Код: plaintext
1.
2.
3.
4.
5.
select id
 ,sum2
 ,sum3
from table1 t1 
 left outer join (select t2.id, sum(t2.amount2) as sum2 from table2) as t2 on t2.id=t1.id
 left outer join (select t3.id, sum(t3.amount3) as sum3 from table3) as t3 on t3.id=t1.id
а если суммы берутся из нескольких больших таблиц, то вычисление подзапросов отнимет много времени. Есть ли другой путь?
...
Рейтинг: 0 / 0
05.05.2004, 19:48
    #32508116
ggv
ggv
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли упростить запрос?
What if to use WITH ?
It will be two 'views', but I don't know a difference between WITH and subquery in performance.
Explain might help to chose.
...
Рейтинг: 0 / 0
05.05.2004, 19:56
    #32508128
gardenman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли упростить запрос?
Я полагаю лучше использовать не left а full, в вашем случае это равносильные конструкции, а отработает быстрее
...
Рейтинг: 0 / 0
06.05.2004, 10:01
    #32508506
mike_x
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли упростить запрос?
Попробуй так:
select
t1.id,
sum(t2.amount2),
sum(t3.amount3)
from t1 left outer join t2
on t1.id=t2.id
left outer join t3
on t1.id=t3.id
group by t1.id
...
Рейтинг: 0 / 0
06.05.2004, 12:11
    #32508812
riman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли упростить запрос?
2mike_x
:) не так всё просто. В твоём запросе получается декартово произведение. Попробуй сам - увидишь.
...
Рейтинг: 0 / 0
06.05.2004, 12:16
    #32508829
Павел Воронцов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли упростить запрос?
По крайней мере от одного подзапроса можно избавиться
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
select t1.id
 ,sum(t2.sum2) as sum2
 ,sum(t3.amount3) as sum3
from table1 t1 
 left outer join (select t2.id, sum(t2.amount2) as sum2 from table2) as t2 on t2.id=t1.id
 left outer join table3 as t3 on t3.id=t1.id
group by t1.id
...
Рейтинг: 0 / 0
06.05.2004, 12:29
    #32508874
riman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли упростить запрос?
2 gardenman
Почему быстрее?

2 all
В общем лучше никто не напишет похоже. Ладно, будем пользоваться как было.
...
Рейтинг: 0 / 0
06.05.2004, 12:34
    #32508889
gardenman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли упростить запрос?
2 riman

Я сам не понимаю почему быстрее. У меня была схожая ситуация.
Я долго этспериментировал, оказалось что с full быстрее, причем на много.
В планах запросов никаких отличий не увидел.
...
Рейтинг: 0 / 0
06.05.2004, 17:36
    #32509662
mike_x
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли упростить запрос?
Попробуй еще вот так:

select
t1.id,
(select sum(t2.amount2) from t2 where t1.id=t2.id),
(select sum(t3.amount3) from t3 where t1.id=t3.id)
from t1

Хотя не очень верится, что будет быстрее.
...
Рейтинг: 0 / 0
17.05.2004, 17:30
    #32520922
riman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли упростить запрос?
2gardenman.
INNER работает ещё быстрее. :))
2mike_x
Твой пример работает быстрее. Спасибо.
...
Рейтинг: 0 / 0
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / Можно ли упростить запрос? / 10 сообщений из 10, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]