left join 。是以左表为基础,查询右表的值。如果在右表中没用没有数据,则为NULL。
这里有三张表。
线路bs_line:id,name(id主键)
线路段bs_seg:id,l_id,name(l_id关联线路id)
配变bs_dsub:id,seg_id,name(seg_id关联线路段id)
它们之间的关系是: 配变 -> 线路段 -> 线路。
现在的需求:
统计出每条线路有多少台配变
sql语句:
select bs_line.name, count(bs_dsub.name) dsub_num from bs_line
left join bs_dsub
on
bs_dsub.seg_id in (select id from bs_seg where l_id = bs_line.id)
group by bs_line.name /*group by 显示线路 */
执行该语句时,速度很慢。检查了下sql语句,发现用in时,会遍历多次。于是改为 =
select bs_line.name, count(bs_dsub.name) dsub_num from bs_line
left join bs_dsub
on
bs_dsub.seg_id = (select id from bs_seg where l_id = bs_line.id)
group by bs_line.name
可以正常使用了。
回顾:
1、from bs_line left join bs_dsub :表示 以bs_line为左表,以bs_dsub为右表。
2、bs_dsub.seg_id =(select id from bs_seg where l_id = bs_line.id) 中的 bs_line.id 指遍历的每一条线路id值,以此为条件进行查询。
3、在sql语句里尽量不要用in,使用 '=',避免语句多次循环。