SQL join 3 таблицы

SQL код:

create table claim(ClaimID int);

insert into claim (ClaimID)
values (1), (2), (3), (4), (5);

create table tbl1(ClaimID int, Amnt float);

insert into tbl1 (ClaimID, Amnt)
values (1, 10),
(2, 20),
(2, 20),
(3, 30);

create table tbl2(ClaimID int, Amnt float);

insert into tbl2 (ClaimID, Amnt)
values (1, 10),
(1, 10),
(4, 40),
(3, 30);

select c.claimid, count(tbl1.claimid), count(tbl2.claimid)
from claim c
inner join tbl1 on c.claimid = tbl1.claimid
left join tbl2 on c.claimid = tbl2.claimid
group by tbl1.claimid, tbl2.claimid
;

Результат:

1|2|2
2|2|0
3|1|1

Вопрос: почему count(tbl1.claimid) возвращает 2 а не 1?

Upd: Почему присоединение tbl2 влияет на количество IDs в tbl1?

Спасибо!


Ответы (1 шт):

Автор решения: dima121181

Потому что в таблице tbl2 у вас две записи с id=1, из-за чего одна и та же запись tbl1 считается два раза.

Я бы переписал запрос таким образом.


    select c.claimid
      , (select count(*) q from tbl1 where c.claimid = claimid) q1
      , (select count(*) q from tbl2 where c.claimid = claimid) q2
    from claim c
    where exists(select ClaimID from tbl1 where c.claimid = claimid)

→ Ссылка