У меня есть 3 таблицы клиентов с идентификатором int (pk), parent_id int, текстом имени Сайты с идентификатором int (pk), parent_id int, текстом имени и контактом с идентификатором int (pk), parent_id int, именем name и site_id int
Сайты связаны с клиентами через parent_id. Контакты связаны с клиентами через parent_id
. Некоторые контакты также привязаны к одному сайту (site_id в качестве значения), некоторые не имеют значения в этом. поле, означающее, что они могут видеть все сайты
Моя цель - с помощью одного списка запросов сайта, к которому прикреплен контакт, или всех сайтов, прикрепленных к клиенту
Я придумал
Select sites.* from sites
join clients on sites.parent_d = clients.id
join contacts on contacts.parent_id = clients.id
where contacts.name = 'the name'
and case when contacts.site_id is null then true
else contacts.site_id is not null then cn.site_id = s.id
end
этот запрос возвращает правильные результаты, но мне интересно, есть ли более чистый способ достижения моей цели
Заранее спасибо