我有以下PGSQL声明,意味着从多个清单返回所有项目
SELECT
cl.id as checklist_id,
ci.id checklist_item_id,
ci.name,
ci.details,
cil.id as logid,
cil.date_added,
cs.id as schedule_id,
a.id as account_id, a.first_name || ' ' || a.last_name as full_name
FROM checklist_item ci
LEFT JOIN checklist cl ON cl.id = ci.checklist_id
LEFT JOIN checklist_item_log cil ON cil.checklist_item_id = ci.id
LEFT JOIN checklist_schedule cs ON cs.id = cil.checklist_schedule_id
LEFT JOIN account a ON a.id = cil.account_id
--WHERE cil.date_added >= now()::date + interval '1h' OR cil.date_added is null
GROUP BY cl.id, ci.id, cil.id, cs.id, a.id
虽然这个功能很好,但是我还需要它包含以前日期的项目,但是作为一个空的结果。
对于上面的结果,[3] chairs
应该在checklist_item_log
表中返回null结果。这可能吗?
如果您需要更多说明,请告诉我
答案 0 :(得分:1)
正如我在评论中提到的,你的解决方案是:
SELECT
cl.id as checklist_id,
ci.id checklist_item_id,
ci.name,
ci.details,
cil.id as logid,
cil.date_added,
cs.id as schedule_id,
a.id as account_id, a.first_name || ' ' || a.last_name as full_name
FROM checklist_item ci
LEFT JOIN checklist cl ON cl.id = ci.checklist_id
LEFT JOIN checklist_item_log cil ON cil.checklist_item_id = ci.id
LEFT JOIN checklist_schedule cs ON cs.id = cil.checklist_schedule_id
LEFT JOIN account a ON a.id = cil.account_id
AND (cil.date_added >= now()::date + interval '1h'
OR cil.date_added is null)
GROUP BY cl.id, ci.id, cil.id, cs.id, a.id
答案 1 :(得分:0)
使用两个查询,一个如上所述,另一个只选择上面描述的旧查询。
然后在查询之间编写UNION ALL
以将它们组合到单个查询中。