应使用哪种正确的JOIN?订单关联产品表查询无产品订单缺失问题
问题分析与解决方案
嘿,我来帮你拆解下你遇到的两个问题:
JOIN类型选择错误:你用的
INNER JOIN只会返回两张表中满足关联条件的记录——也就是说,只有那些在Products表中能找到对应Product_Id的订单才会被展示。而你提到的“未关联产品的订单(服务订单)”,因为在Products表里没有匹配的Id,直接被INNER JOIN过滤掉了。要保留所有订单(不管有没有对应产品),你应该用LEFT JOIN(或者LEFT OUTER JOIN,两者功能完全一致),它会保留左表(这里是Orders)的所有记录,右表(Products)没有匹配项时,对应字段就返回NULL。SQL语法拼写错误:你的查询语句里写了
order.product_id,这里少了个复数后缀s,应该是orders.product_id,这个小失误也会导致查询无法正常执行。
下面是修正后的完整查询语句:
SELECT orders.id, orders.started, products.id AS product_id, products.name AS product_name FROM orders LEFT JOIN products ON products.id = orders.product_id;
这样执行后,所有订单都会被返回,没有对应产品的订单中,product_id和product_name字段会显示为NULL,完全符合你的需求。我还给产品相关字段加了别名,让查询结果更易读~
内容的提问来源于stack exchange,提问作者user9516652
相关产品推荐
相关产品推荐

