Как лучше составить SQL запрос, охватывающий несколько таблиц?

Привет! Есть вот такие таблицы:

5cf64a7b07c13063950668.png
________________________________________________________________________________________________________________________________________

people - люди
planet - планеты
planet_resource - ресурсы, которые присутствуют на планетах
people_planet - сопоставление планет и людей, у которых есть туда доступ
planet_resource_person - сопоставление ресурсов планет и людей, у которых есть к ним доступ

Как видно из таблиц, у нескольких людей может быть доступ на одну и ту же планету, но при этом возможен разный доступ к ресурсам, в том числе полное отсутствие доступа к ресурсам.

Внимание, вопрос) Как для определенного человека получить список планет, на которых у него есть доступ хотя бы к одному ресурсу? Например, у Виктора есть доступ на Венеру и Землю, но при этом доступ к ресурсам есть только на Венере - то есть результатом запроса должна быть строка с id=2 из таблицы planet.
  • Вопрос задан
  • 113 просмотров
Решения вопроса 1
Надо не только связать, но и вычленить уникальные данные без дублирования, здесь поможет инструкция DISTINCT:
SELECT DISTINCT
  planet.*
FROM
  planet
INNER JOIN
  planet_resource
ON
  planet_resource.planet_id = planet.id
INNER JOIN
  planet_resource_person
ON
  planet_resource_person.resource_id = planet_resource.id
INNER JOIN
  people_planet
ON
  people_planet.people_id = planet_resource_person.person_id
  AND people_planet.planet_id = planet.id
WHERE
  people_planet.people_id = ID нужного человека
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
tsklab
@tsklab
Здесь отвечаю на вопросы.
Связать JOIN.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы