I am having a or problem
reproducible by script below
(or by sql or by query if
mail filter likes those words
better:) ).

Briefly:
4 tables joined to each other:

 /-ar
a
 \-b-br

I would expect to get totals based on
the root record in a:
a_id    q_a     q_ar    q_b     q_br
1       1       4       12      44

But I am getting:
a_id    q_a     q_ar    q_b     q_br
1       8       16      44      88

It obviously multiplies each total
by number of records processed in the
later joins.

Is this the right behavior?
Is it a way to get the expected
behavior which is quite natural?

Why does it count each record in ar
again once it finds new records for later
joins?

Thanx,
Yuri.


-------cut----script begins------------
create temporary table a(a_id int, q int);
create temporary table ar(ar_id int, q int, a_id int);
create temporary table b(b_id int, q int, a_id int);
create temporary table br(br_id int, q int, b_id int);

insert into a  values(1, 1);
insert into ar values(1, 1, 1);
insert into ar values(2, 3, 1);
insert into b  values(1, 5, 1);
insert into b  values(2, 7, 1);
insert into br values(1, 5, 1);
insert into br values(2, 11, 1);
insert into br values(3, 11, 1);
insert into br values(4, 17, 2);

select
    a.a_id,
    sum(a.q) as q_a,
    sum(ar.q) as q_ar,
    sum(b.q) as q_b,
    sum(br.q) as q_br
  from
    a
    left join ar on (ar.a_id = a.a_id)
    left join b on (b.a_id = a.a_id)
    left join br on (br.b_id = b.b_id)
  group by a.a_id
-------cut----script ends------------


---------------------------------------------------------------------
Before posting, please check:
   http://www.mysql.com/manual.php   (the manual)
   http://lists.mysql.com/           (the list archive)

To request this thread, e-mail <[EMAIL PROTECTED]>
To unsubscribe, e-mail <[EMAIL PROTECTED]>
Trouble unsubscribing? Try: http://lists.mysql.com/php/unsubscribe.php

Reply via email to