0

説明が難しいので、地図にしてみます。houseslandlord_housescompanyおよびの 4 つのテーブルtenantがある場合、過去 14 日間にサインアップした家をすべて検索し、それらに関する情報を取得する必要があります。

以前は、テーブルselectからの非常に単純なクエリでこれを行っていました。housesしかし今、家の賃貸仲介業者にレポートに表示してもらう必要があります。問題は、賃貸エージェントが、テーブル内、テーブル内、またはcompanyテーブル内の 3 つの場所のいずれかにいる可能性があることです。私はこれまでにこのクエリを思いつきました:housestenant

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ます。これは、会社、住宅、テナントのテーブルに、これらの住宅の賃貸エージェントが複数あるためだと思います。

これを機能させるには、クエリで何を変更する必要がありますか?

ありがとうございました。

4

1 に答える 1

-1

そのケースステートメントは少し不安定に見えます。複数の値を返す場合があります。これを試して:

COALESCE(c.name, h.letting_agent, t.letting_agent, 'Unknown (Not set yet)') as Agent

これは c.name をチェックします。null の場合は、次の引数に移動して同じことを行います。

クエリの他のすべては問題ないように見え、これは postgresql で機能します。

于 2013-07-18T14:45:58.887 に答える