结合左外连接、内连接与聚合函数查询返回空结果集问题
核心错误
你的写法核心问题出在GROUP BY的规则不符合要求:
所有主流关系型数据库均要求,SELECT子句中未被聚合函数包裹的字段,必须全部出现在GROUP BY子句中。你当前查询里r.text既没有被聚合函数包裹,也没有加入GROUP BY列表,当数据库开启严格校验模式时,会直接判定语句非法返回空,或者直接报错。
修复方案
因为你需要在Reviews无匹配时返回NULL,用任意聚合函数包裹r.text即可(这里用MAX/MIN都可以,单个NULL值的聚合结果仍然是NULL,完全符合你的预期),修改后的语句如下:
SELECT c.id_customer, MIN(o.order_date) order_date, MAX(r.text) review_text FROM Customer c JOIN Profile p ON c.id_customer = p.id_profile LEFT OUTER JOIN Orders o ON o.id_customer = c.id_customer AND o.order_type = 'Online' LEFT OUTER JOIN Reviews r ON r.id_profile = p.id_profile AND r.score = 5 WHERE c.id_customer = 1234 GROUP BY c.id_customer
额外检查点
注意你给出的Reviews表结构中用户关联字段是id_profile,但你原查询语句中关联条件写的是r.id_reviewer = p.id_profile,如果不是简化示例时的笔误,字段名不匹配也会导致关联结果不符合预期,请优先核对实际表结构的字段名。
内容的提问来源于stack exchange,提问作者Juan M
相关产品推荐
相关产品推荐

