Есть ли лучший способ написать этот SQL, чем с помощью WHERE ... IN (подзапрос)?
SELECT device.mac, reseller.name, agent.name
FROM device
LEFT JOIN global_user
ON device.global_user_id = global_user.id
LEFT JOIN agent
ON global_user.id = agent.global_user_id
LEFT JOIN reseller
ON global_user.id = reseller.global_user_id
OR agent.reseller_id = reseller.id
WHERE device.global_user_id IN (
SELECT global_user_id
FROM reseller
WHERE id = '200'
) OR device.global_user_id IN (
SELECT global_user_id
FROM agent
WHERE reseller_id = '200'
);
Я пытаюсь получить список всех устройств с некоторыми сведениями о посреднике / агенте по конкретному посреднику. это будет включать устройства, назначенные непосредственно посреднику, и устройства, назначенные агентам при посреднике. reseller.id является уникальным. он будет выполнен в базе данных postgresql.
устройства назначаются как агентам, так и посредникам. агенты назначаются посредникам.
этот запрос работает, но я не часто использую ИЛИ в JOIN и обычно стараюсь избегать подзапросов. эта концепция запроса будет использоваться часто, поэтому я хотел бы убедиться, что я ничего не пропустил.
спасибо за любые отзывы.