You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

带where过滤时inner join与left join结果相同,应该选择哪种join?

两类写法结果一致的原因

你写的LEFT JOIN语句实际已经被WHERE条件改成了等价INNER JOIN的效果:
LEFT JOIN执行时,没有匹配到订单的客户(1002 Boi、1004 Dore)对应的t2.color字段会是NULL,而WHERE t2.color='pink'会把所有t2.color为NULL的行全部过滤掉,最终只会保留同时匹配了客户表、且有粉色订单的记录,和INNER JOIN的执行结果完全一致。

JOIN选型判断逻辑

判断用哪种JOIN的核心依据是你的业务需求,没有通用的最优解,只看和需求的匹配度:

  • 如果你要的是仅购买过粉色商品的客户(必须同时存在客户信息、对应的粉色订单记录),优先选INNER JOIN:
    • 可读性更强:看代码的人不需要额外排查WHERE条件,第一眼就能明确你要的是两张表匹配成功的记录
    • 执行效率更高:数据库优化器不需要先保留左表全量数据再做过滤,能生成更优的执行计划,数据量越大优势越明显
  • 如果你要的是全量客户的粉色商品购买情况(没有买过粉色的客户也要保留,购买信息位留空),就用LEFT JOIN,但要注意把右表的过滤条件放到ON子句里,而不是WHERE里,正确写法示例:
select t1.cid,t1.name,t2.color
from Customers t1
left join Orders t2
on t1.cid=t2.cid and t2.color='pink'

这个写法会返回全部4位客户,没有买过粉色的Boi、Dore对应的color字段会显示为NULL。

内容的提问来源于stack exchange,提问作者rtys

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 10:06:01