有点难以解释,所以我会把它映射出来。鉴于以下四个表:houses
,landlord_houses
,company
和tenant
,我需要查找过去14天内已注册的所有房屋并获取有关的信息它们。
之前我使用select
表中的一个非常简单的houses
查询完成了此操作。但现在我需要让房子的租赁代理人在报告上显示。问题是,letting代理可以位于3个位置中的任何一个位置:company
表,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
,我也会收到重复的房屋。我认为这是因为公司,房屋和租户桌中有多个租赁代理商。
在查询中需要更改哪些内容才能使其生效?
谢谢。
答案 0 :(得分:-1)
那个案例陈述看起来有点不稳定。您可能会返回多个值。试试这个:
COALESCE(c.name, h.letting_agent, t.letting_agent, 'Unknown (Not set yet)') as Agent
这会检查c.name。如果为null,则移至下一个参数并执行相同操作。
查询中的其他所有内容看起来都很好,这在postgresql中也可以。