Здравствуйте, <Аноним>, Вы писали:
А>есть некая таблица A со счетами А>так вот при таком запросе "не бъет" цифра... какие то левые суммы получаются...
ну естессно.
select A.Name, sum(B.Count), sum(C.Count)
from A
leftjoin B on B.AID=A.ID,
leftjoin C on C.AID=A.ID
where .....
group by A.Name
... << RSDN@Home 1.1.3 beta 1 >>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[2]: хитрый запрос
От:
Аноним
Дата:
26.01.04 14:35
Оценка:
Здравствуйте, Sinclair, Вы писали:
S>Здравствуйте, <Аноним>, Вы писали:
А>>есть некая таблица A со счетами А>>так вот при таком запросе "не бъет" цифра... какие то левые суммы получаются...
S>ну естессно. S>
S>select A.Name, sum(B.Count), sum(C.Count)
S>from A
S>leftjoin B on B.AID=A.ID,
S>leftjoin C on C.AID=A.ID
S>where .....
S>group by A.Name
S>
увы... ни фига.
получается, что он в результат добавляет строки и для первого и для второго соответствия,
т.е. получаем какбы аод 2 строки с A.ID
но затем, и B.* и С.* присутсвуют значения в каждой строке. получается что они по 2 раза там.
Здравствуйте, <Аноним>, Вы писали:
А>увы... ни фига.
А! Точно! Есть такая фигня. А>получается, что он в результат добавляет строки и для первого и для второго соответствия,
Да-да-да. А>т.е. получаем какбы аод 2 строки с A.ID А>но затем, и B.* и С.* присутсвуют значения в каждой строке. получается что они по 2 раза там.
В общем, надо делать сначала group by, а уже потом join:
select A.Name, sumB, sumC
from A
left join (select AID, sum(count) as sumB from B group by AID) BG on BG.AID = A.ID
left join (select AID, sum(count) as sumB from C group by AID) CG on CG.AID = A.ID
... << RSDN@Home 1.1.3 beta 1 >>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[4]: хитрый запрос
От:
Аноним
Дата:
26.01.04 16:23
Оценка:
Здравствуйте, Sinclair, Вы писали:
S>Здравствуйте, <Аноним>, Вы писали:
А>>увы... ни фига. S>А! Точно! Есть такая фигня. А>>получается, что он в результат добавляет строки и для первого и для второго соответствия, S>Да-да-да. А>>т.е. получаем какбы аод 2 строки с A.ID А>>но затем, и B.* и С.* присутсвуют значения в каждой строке. получается что они по 2 раза там. S>В общем, надо делать сначала group by, а уже потом join: S>
S>select A.Name, sumB, sumC
S>from A
S>left join (select AID, sum(count) as sumB from B group by AID) BG on BG.AID = A.ID
S>left join (select AID, sum(count) as sumB from C group by AID) CG on CG.AID = A.ID
S>
блин мне надо в свою очередь B и С джоинить с таблицами B_Details и С_Details
такой крокодил получится....=(
Re[4]: хитрый запрос
От:
Аноним
Дата:
26.01.04 16:43
Оценка:
Здравствуйте, Sinclair, Вы писали:
S>Здравствуйте, <Аноним>, Вы писали:
А>>увы... ни фига. S>А! Точно! Есть такая фигня. А>>получается, что он в результат добавляет строки и для первого и для второго соответствия, S>Да-да-да. А>>т.е. получаем какбы аод 2 строки с A.ID А>>но затем, и B.* и С.* присутсвуют значения в каждой строке. получается что они по 2 раза там. S>В общем, надо делать сначала group by, а уже потом join: S>
S>select A.Name, sumB, sumC
S>from A
S>left join (select AID, sum(count) as sumB from B group by AID) BG on BG.AID = A.ID
S>left join (select AID, sum(count) as sumB from C group by AID) CG on CG.AID = A.ID
S>
хмм... отказывается эта пакость делать вложенный запрос в left join
база MSSQL....
select name, sum(b_cnt), sum(c_cnt)
from
(
select name, isnull(count, 0) as b_cnt, 0 as c_cnt
from a
left join b
on a.id = b.aid
union all
select name, 0 as b_cnt, isnull(count, 0) as c_cnt
from a
left join c
on a.id = c.aid
) as t1
where ...
group by name
PS а left join с вложенным запросом работает без проблем — смотри внимательнее, скорее всего что-то напутал
Re[4]: хитрый запрос
От:
Аноним
Дата:
27.01.04 07:33
Оценка:
Здравствуйте, Sinclair, Вы писали:
S>
S>select A.Name, sumB, sumC
S>from A
S>left join (select AID, sum(count) as sumB from B group by AID) BG on BG.AID = A.ID
S>left join (select AID, sum(count) as sumB from C group by AID) CG on CG.AID = A.ID
S>
а насколько оптимален такой запрос?
он во вложенном запросе выберет и сгрупирует все данные??? или уже отфильтрованые по BG.AID = A.ID
Здравствуйте, Аноним, Вы писали:
А>Здравствуйте, Sinclair, Вы писали:
S>>
S>>select A.Name, sumB, sumC
S>>from A
S>>left join (select AID, sum(count) as sumB from B group by AID) BG on BG.AID = A.ID
S>>left join (select AID, sum(count) as sumB from C group by AID) CG on CG.AID = A.ID
S>>
А>а насколько оптимален такой запрос? А>он во вложенном запросе выберет и сгрупирует все данные??? или уже отфильтрованые по BG.AID = A.ID
А откуда внутренний запрос знает о внешнем?
Re[6]: хитрый запрос
От:
Аноним
Дата:
27.01.04 08:04
Оценка:
Здравствуйте, Basilisk, Вы писали:
B>Здравствуйте, Аноним, Вы писали:
А>>Здравствуйте, Sinclair, Вы писали:
S>>>
S>>>select A.Name, sumB, sumC
S>>>from A
S>>>left join (select AID, sum(count) as sumB from B group by AID) BG on BG.AID = A.ID
S>>>left join (select AID, sum(count) as sumB from C group by AID) CG on CG.AID = A.ID
S>>>
А>>а насколько оптимален такой запрос? А>>он во вложенном запросе выберет и сгрупирует все данные??? или уже отфильтрованые по BG.AID = A.ID
B>А откуда внутренний запрос знает о внешнем?
ну оптимизатор там например...
т.е. если у меня в A 100000 записей, и кажой из них стоит в соответствие 2-3 записи в B и С
то мне во внутренних запрсах построит болшушие таблицы по 100000 записей просумировваных, а потом из них выберет то что мне надо?
Здравствуйте, <Аноним>, Вы писали:
А>хмм... отказывается эта пакость делать вложенный запрос в left join А>база MSSQL....
случайно не
Invalid column name 'count'.
???
... << RSDN@Home 1.1.3 beta 1 >>
— сколько программистов надо чтобы заменить сгоревшую лампочку?
— сколько не бери, а лампочку не поменять — проблема аппаратная, программным путем не решается...