説明が難しいので、地図にしてみます。houses
、landlord_houses
、company
およびの 4 つのテーブルtenant
がある場合、過去 14 日間にサインアップした家をすべて検索し、それらに関する情報を取得する必要があります。
以前は、テーブルselect
からの非常に単純なクエリでこれを行っていました。houses
しかし今、家の賃貸仲介業者にレポートに表示してもらう必要があります。問題は、賃貸エージェントが、テーブル内、テーブル内、またはcompany
テーブル内の 3 つの場所のいずれかにいる可能性があることです。私はこれまでにこのクエリを思いつきました:houses
tenant
select distinct h.id as id,
h.address1 as address1,
h.town as town,
h.postcode as postcode,
h.valid_from as valid_from,
h.valid_to as valid_to,
(CASE WHEN c.name IS NOT NULL THEN c.name || ' (MS)'
WHEN h.letting_agent IS NOT NULL THEN h.letting_agent
WHEN t.id IS NOT NULL THEN t.letting_agent
ELSE 'Unknown (Not set yet)' END) AS agent
from houses h
left join landlord_houses lh on lh.house_id = h.id
left join company c on c.id = lh.company_id
left join tenant t on t.house_id = h.id
where h.deleted IS FALSE
and h.archived IS FALSE
and h.sign_up_complete IS TRUE
and h.completed > NOW() - '14 days'::INTERVAL
order by h.id
この種の作品は、しかし、「不明(まだ設定されていません)」と言うつもりであるagent
にもかかわらず、空のフィールドを持つ結果が返されます。を使用したにもかかわらず、重複した家が返されdistinct h.id
ます。これは、会社、住宅、テナントのテーブルに、これらの住宅の賃貸エージェントが複数あるためだと思います。
これを機能させるには、クエリで何を変更する必要がありますか?
ありがとうございました。