Декартово произведение SQL

Я искал другие вопросы, но я действительно не понимаю, как получить правильную сумму, а не декартово произведение.

У меня есть следующая таблица:

EGAIT6  EGACAM      EGVONO   ACC
2477717 -1443,87    41300015 2995
2477717 -2424,75    41300021 2995
2477717 -26630,16   41300022 2995
2477717   22652,96  41563318 2995
2477717   14513,12  41566334 2995
2477717   7703,08   41566335 2995
2477717   1443,87   41566336 2995
2477717   2482,70   41566338 2995
2477717   1124,84   41566339 2995
2477717   4610,99   41566337 2995
2477717    393,45   41571055 2995
2477717    393,45   41571056 2995
2477717    344,04   41574437 2995
2477717    344,04   41574438 2995
2477717    344,04   41584940 2995
2477717    344,04   41584941 2995
2477717    225,70   41689722 2995
2477717   1814,75   41726904 2995
2477717   1814,75   41726905 2995

Это мой запрос:

select 
    a.egait6, 
    sum(a.egacam), 
    a.egvono, 
    max(a.egvtxt), 
    max(a.egacdt)
from m3prd.fgledg a
inner join m3prd.fgledg b
    on a.egait6 = b.egait6 
where a.egcono=001 
    and a.egdivi='012' 
    and a.egait1='2995' 
    and a.egait6='2477717'
group by a.egait6, a.egvono
having sum(a.egacam)<>0

Я получаю следующий результат:

EGAIT6     EGACAM   EGVONO
2477717 6 880,80    41574437
2477717 49 654,00   41566338
2477717 6 880,80    41584940
2477717 290 262,40  41566334
2477717 36 295,00   41726905
2477717 92 219,80   41566337
2477717 -532 603,20 41300022
2477717 154 061,60  41566335
2477717 7 869,00    41571056
2477717 6 880,80    41574438
2477717 22 496,80   41566339
2477717 36 295,00   41726904
2477717 -48 495,00  41300021
2477717 4 514,00    41689722
2477717 453 059,20  41563318
2477717 6 880,80    41584941
2477717 -28 877,40  41300015
2477717 7 869,00    41571055
2477717 28 877,40   41566336

Как мне заставить мой запрос возвращать правильную сумму в соответствии с моей таблицей, а не декартовым произведением?

Правильная сумма, ожидаемое значение в сумме:

EGACAM
-  1 443,87
-  2 424,75
-  26 630,16
22 652,96
14 513,12
7 703,08
1 443,87
2 482,70
1 124,84
4 610,99
393,45
393,45
344,04
344,04
344,04
344,04
225,70
1 814,75
1 814,75

Я делаю самообъединение, потому что реальная таблица, в которой я ищу, имеет больше и разные значения как в EGAIT6, так и в EGVONO. Поэтому я не могу стереть эту часть запроса. Я просто хочу знать, как избежать получения в результате декартова произведения.


person Lily    schedule 11.02.2015    source источник
comment
Какую сумму вы ожидаете получить?   -  person Nick Bailey    schedule 11.02.2015
comment
Какая именно правильная сумма? Мало того, что вы никогда не говорите об этом явно, ваши имена полей также затрудняют вывод об этом.   -  person pyon    schedule 11.02.2015
comment
Вы соединяете таблицу с самой собой, используя одно и то же поле в обеих таблицах. почему это не должно быть сделано?   -  person Marc B    schedule 11.02.2015
comment
Вы выполняете самосоединение для столбца, который имеет одинаковое значение только для каждой строки в нем, поэтому, конечно, вы получаете декартово произведение.   -  person Tab Alleman    schedule 11.02.2015


Ответы (1)


удалите эти строки:

inner join m3prd.fgledg b
on a.egait6 = b.egait6 

Я не вижу смысла в объединении на одной таблице....

person Martin van Dijk    schedule 11.02.2015