Y at-il une meilleure façon d'écrire ce SQL que d'utiliser WHERE ... IN (sous-requête)?Existe-t-il un meilleur moyen d'écrire ce SQL que d'utiliser WHERE ... IN (sous-requête)?
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'
);
im essayant d'obtenir une liste de tous les appareils, avec quelques détails revendeur/agent, sous un revendeur particulier. Cela inclut les périphériques attribués directement au revendeur et les périphériques attribués aux agents sous le revendeur. reseller.id est unique. il sera exécuté sur la base de données postgresql.
Les périphériques sont affectés à la fois aux agents et aux revendeurs. les agents sont affectés aux revendeurs.
cette requête fonctionne, mais je n'ai pas souvent utilisé un OR dans un JOIN et j'essaie généralement d'éviter les sous-requêtes. Ce concept de requête sera souvent utilisé, donc je voudrais m'assurer que je n'ai pas oublié quelque chose.
merci pour vos commentaires.
Alors, quelle est la question? –
Est-ce que reseller.id est unique? –
la question, comme il apparaît dans le titre, est "est-il un meilleur moyen d'écrire ce SQL que d'utiliser WHERE ... IN (sous-requête)?" Je l'ai ajouté au corps pour plus de clarté. –