Имам две таблици и се опитвам да се присъединя към двете, базирани на първичен и чуждестранен ключ. Но проблемът е, че във втората таблица чуждият ключ има няколко дублиращи се реда.
Структура: -
1 Таблица - категория
catid catname
1 AAA
2 BBB
3 CCC
2 Таблица - отговори
ansid catid userid
1 1 9
2 1 9
3 2 9
4 2 6
Резултатът трябва да бъде
userid catid catname present in answers table
null 1 AAA no
6 2 BBB yes
null 3 CCC no
Моята заявка е
SELECT a.userid, c.catid,c.catname,
case when sum(a.catid is not null) > 0
then "yes" else "no" end as present_in_answers_table
from answers a left join
category c on c.catid = a.catid
where (a.userid = 6) group by c.catid
Но това не връща резултатите, които искам. Връща само един ред, който е
userid catid catname present in answers table
6 2 BBB yes
Отговори:
3 за отговор № 1Мисля, че трябва да промените реда на присъединяване, така че да запазите всичко в category
маса и след това преместете where
условие към on
клауза:
SELECT a.userid, c.catid, c.catname,
(case when count(a.catid) > 0 then "yes" else "no"
end) as present_in_answers_table
from category c left join
answers a
on c.catid = a.catid and
a.userid = 6
group by c.catid;
Обърнете внимание, че също промених sum()
до a count()
-- count()
автоматично брои колко пъти аргументът не е NULL
.