WHERE ... IN (サブクエリ) を使用するよりも、この SQL を記述する良い方法はありますか?
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 で OR を使用することはあまりなく、通常はサブクエリを避けようとします。このクエリの概念は頻繁に使用されるため、何かを見落としていないことを確認したいと思います。
フィードバックをお寄せいただきありがとうございます。