powered by simpleCommunicator - 2.0.52     © 2025 Programmizd 02
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / Можно ли упростить запрос?
10 сообщений из 10, страница 1 из 1
Можно ли упростить запрос?
    #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
Можно ли упростить запрос?
    #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
Можно ли упростить запрос?
    #32508128
gardenman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я полагаю лучше использовать не left а full, в вашем случае это равносильные конструкции, а отработает быстрее
...
Рейтинг: 0 / 0
Можно ли упростить запрос?
    #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
Можно ли упростить запрос?
    #32508812
Фотография riman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2mike_x
:) не так всё просто. В твоём запросе получается декартово произведение. Попробуй сам - увидишь.
...
Рейтинг: 0 / 0
Можно ли упростить запрос?
    #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
Можно ли упростить запрос?
    #32508874
Фотография riman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 gardenman
Почему быстрее?

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

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


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