Чтобы решить эту проблему, вам нужно от JOIN
referensi
до person
, выбрав только записи в referensi
, соответствующие интересующему лицу, а затем от RIGHT JOIN
до hobby
.Если соответствующей записи нет, выходной результат равен 0, иначе 1. Например, для персоны 1:
SELECT h.id,
h.hobby,
CASE WHEN r.id IS NULL THEN 0 ELSE 1 END AS count
FROM referensi r
JOIN person p ON p.id = r.ref_person AND p.id = 1
RIGHT JOIN hobby h ON h.id = r.ref_hobby
ORDER BY h.id
Это также может быть реализовано с помощью коррелированного подзапроса:
SELECT h.id,
h.hobby,
EXISTS (SELECT * FROM referensi r WHERE r.ref_hobby = h.id AND r.ref_person = 1) AS count
FROM hobby h
Если кортеж человека / хобби может появляться в таблице referensi
более одного раза, вам необходимо выполнить вывод COUNT
:
SELECT h.id,
h.hobby,
COUNT(r.id) AS count
FROM referensi r
JOIN person p ON p.id = r.ref_person AND p.id = 1
RIGHT JOIN hobby h ON h.id = r.ref_hobby
GROUP BY h.id
(для всех трех запросов данных примера):
id hobby count
1 Makan 1
2 Renang 0
3 Nyanyi 1
4 Youtube 1
5 Masak 0
Демонстрация по SQLFiddle