left_join时on后多条件AND
一、left join的ON中多条件AND
1)left join的on条件一般只写一个主键关联的字段,例如:
1 | SELECT * FROM product LEFT JOIN product_details ON product.id = product_details.id; |
2)当left join的on条件有多个时,大部分是要通过多个条件限制结果集,应改用inner join,例如:
1 | SELECT * FROM product LEFT JOIN product_details ON product.id = product_details.id AND product_details.weight > 30 |
二、实例演示
1)准备两个表及初始化数据(语句来源)
1 | CREATE TABLE `product` ( |
表数据如下:


2)执行以下SQL查询
1 | # 结果符合预期 |

1 | # ON的多个条件进行AND,括号不影响结果 |

1 | SELECT * FROM product LEFT JOIN product_details |

1 | SELECT * FROM product LEFT JOIN product_details ON product.id=2; |

1 | SELECT * FROM product LEFT JOIN product_details ON product_details.id=2; |

三、left join匹配原理
1)从结果集来看,参考链接:

2)匹配顺序(NLJ为例)
1 | SELECT * FROM A left join B ON condition1 AND condition2; |
如上的LEFT 左侧表A为驱动表,右侧为被驱动表。假设当前使用NLJ的嵌套关联方法,其执行伪代码可简化如下:
1 | List rows = new ArrayList(); |