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)