sql 中 left join 的使用
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,使用 '=',避免语句多次循环。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】