select A.,B.
from A
left join B on B.name=A.name
where A.id=3
left join 会 列出所有左表(A)相应name的数据,如果B中没有与A对应的,则B的字段置Null。此时where的过滤条件只能作用于 left join后的中间表。
注意以下三点:
- left join 会列出左表所有的数据!
- on 只作用于生成中间表!
- where 只作用于生成后的中间表!
问题记录:
public class User{
private int id;
private String name;
private List<Car> list;
······
}
public class House{
private int id;
private String name;
private int userId
······
}
select u.*,h.*
from user u
left join house h on u.id = house.userId
where u.id= ?
会出现list.size()>1 但是元素全是null的情况。
可以看看这篇 on 和where条件的放置详解
如果要过滤右表元素,需要将条件放在 ON;
如果要过滤左表元素,需要将条件放在 WHERE;
网友评论