LEFT JOIN ON的使用语法:

select [需要查询的字段] 
from [table_name1] 
left join [table_name2] 
on [两个表关联的条件] 
(where [进一步对查询结果过滤的条件]) 

LEFT JOIN关键字会从左表(table_name1)那里返回所有的,即使在右表(table_name2)中没有匹配的行。

以秒杀项目为例,现在有两个表,表结构如下:
goods表:

idgoods_namegoods_pricegoods_stock
1iphone876510
2华为Meta3090009
3小米930006

seckill_goods表:

idgoods_idseckill_pricestock_countstart_dateend_date
11400042019-10-22 20:18:002019-10-25 14:00:14
22500072019-10-23 22:00:002019-10-24 22:00:00

现在有一个需求:

查询所有商品的详细信息(包括商品秒杀的信息)

sql语句如下:

select g.*,sg.seckill_price,sg.stock_count,sg.start_date,sg.end_date
from goods g
left join seckill_goods sg
on g.id=sg.goods_id

查询的结果如下:

idgoods_namegoods_pricegoods_stockseckill_pricestock_countstart_dateend_date
1iphone876510400042019-10-22 20:18:002019-10-25 14:00:14
2华为Meta3090009500072019-10-23 22:00:002019-10-24 22:00:00
3小米930006

从上表可以看出,左表(goods)的所有行是被列出来了,不管右表(seckill_goods)中有没有匹配的行。


如果这时候需求改为:

根据 商品ID 查询所有商品的详细信息(包括商品秒杀的信息)

这是我们的sql语句就变为:

select g.*,sg.seckill_price,sg.stock_count,sg.start_date,sg.end_date
from goods g
left join seckill_goods sg
on g.id=sg.goods_id
where g.id=#{id}

where条件是在left join查询的临时表生成好之后,再对临时表进行过滤的条件。

Logo

更多推荐