MySQL4张表关联创建全量视图的外连接查询问题
问题根因
- 连接类型错误:你使用的
NATURAL JOIN本质是内连接,会直接过滤掉无订单的客户Smith的记录,后续连接无法再保留该部分数据 - 连接逻辑冲突:混用左连接、右连接后,右连接产品表仅会保留产品侧全量数据,客户侧未匹配的记录会被直接丢弃
- 语法错误:Order是MySQL保留字,你原代码中写的
òrder存在字符拼写错误,反引号包裹也不规范
实现方案
你的需求是同时保留全量客户、全量产品的维度数据,再匹配交易关联数据,正确逻辑是先拉取客户和产品的全量组合,再左连接订单关联链路,未匹配字段自动返回NULL,创建视图的代码如下:
CREATE VIEW customer_order_full_view AS SELECT c.lastname, o.date AS order_date, p.ref AS product_ref, p.price, po.quantity FROM Customer c -- 生成所有客户+所有产品的全量维度组合 CROSS JOIN Product p -- 左连接订单和关联中间表,不丢失维度数据 LEFT JOIN `Order` o ON c.customer_id = o.customer_id LEFT JOIN product_to_order po ON o.order_id = po.order_id AND p.product_id = po.product_id;
返回结果说明
执行上述视图查询后,会返回三类数据,完全匹配你的需求:
- 正常关联的订单数据:客户Doe的2条订单对应关联的产品、价格、数量都会正常展示
- 无订单的客户数据:客户Smith的记录会保留,对应order_date、quantity字段返回NULL
- 无订单关联的产品数据:product_id=3的商品记录会保留,对应没有关联订单的行order_date、quantity字段返回NULL
内容的提问来源于stack exchange,提问作者Jean-Luc Aubert
相关产品推荐
相关产品推荐

