当前位置: 首页 > backend >正文

SQL理解——INNER JOIN

文章目录

  • SQL语句
  • 需求
  • 使用 INNER JOIN 的原因

SQL语句

    /*** 查询两个用户之间共有的单聊 sessionId** @param userId1 第一个用户的ID* @param userId2 第二个用户的ID* @return 共有的单聊 sessionId 列表*/@Select("SELECT us1.session_id " +"FROM user_session us1 " +"INNER JOIN user_session us2 ON us1.session_id = us2.session_id " +"INNER JOIN session s ON us1.session_id = s.id " +"WHERE us1.user_id = #{userId1} " +"AND us2.user_id = #{userId2} " +"AND s.type = 1 " +"AND s.status = 1 " +"AND us1.status = 1 " +"AND us2.status = 1")List<Long> findCommonSingleChatSessionIds(@Param("userId1") Long userId1, @Param("userId2") Long userId2);

需求

在代码中,目标是查询两个用户之间共有的单聊会话sessionId。
具体需求是:
找到两个用户都参与的会话。
确保这些会话是单聊(type = 1)且状态有效(status = 1)。

使用 INNER JOIN 的原因

匹配需求:代码的目标是找到两个用户都参与的会话,这意味着只有当两个用户在user_session表中都有记录时,才认为这是一个有效的会话。INNER JOIN正好满足这个需求,它只返回两个表中匹配的记录。
数据完整性:在这个场景中,我们不需要保留任何一个用户的所有记录,而是需要找到两个用户共同参与的会话。因此,INNER JOIN是更合适的选择。
性能优化:INNER JOIN通常比LEFT JOIN更高效,因为它只处理匹配的记录。在这个场景中,使用INNER JOIN可以提高查询效率。

使用 LEFT JOIN 的问题:
返回多余的数据:LEFT JOIN会返回左表中的所有记录,即使右表中没有匹配的记录。这会导致查询结果中包含不相关的数据,不符合我们的需求。
性能下降:LEFT JOIN需要处理更多的数据,尤其是当左表比右表大得多时。这可能会导致查询效率降低。

http://www.xdnf.cn/news/16704.html

相关文章:

  • 7月31日作业
  • 大数据之Hive
  • SpringBoot3.x入门到精通系列:1.2 开发环境搭建
  • 本地部署VMware ESXi,并实现无公网IP远程访问管理服务器
  • Linux 服务器性能优化:性能监控,系统性能调优,进程优先级,内核升级全解析
  • Maven 与单元测试:JavaWeb 项目质量保障的基石
  • 银河麒麟桌面操作系统:自定义截图快捷键操作指南
  • 云计算一阶段Ⅱ——3. Linux 计划任务管理
  • TypeScript 基础介绍(二)
  • 使用python写一套完整的智能体小程序
  • Linux网络-------3.应⽤层协议HTTP
  • 智慧物流分拣误检率↓85%!陌讯轻量化部署算法在动态包裹检测的落地实践
  • Winform PathGradientBrush类使用
  • Conda环境下配置的基本命令
  • Ubuntu 下配置 NVIDIA 驱动与 CUDA 环境(适配 RTX 4060Ti)
  • webpack-babel
  • SAM附录详解
  • 【C#】基于SharpCompress实现压缩包解压功能
  • 揭秘动态测试:软件质量的实战防线
  • 【Golang】用官方rate包构造简单IP限流器
  • 【NLP舆情分析】基于python微博舆情分析可视化系统(flask+pandas+echarts) 视频教程 - 微博评论数据可视化分析-点赞区间折线图实现
  • 04百融云策略引擎项目laravel实战步完整安装composer及tcpdf依赖库和验证-优雅草卓伊凡
  • Cesium 快速入门(二)底图更换
  • 数据库学习------数据库隔离类型及其与事务特性
  • 如何将 Redis 监控集成到微服务整体的监控体系中( 如 Prometheus + Grafana)
  • 如何为C#加入EPPlus 包
  • 哈希相关的模拟实现
  • 【人工智能】当AI智能体遇上安全与伦理:一场技术与人性的对话
  • Java学习第九十一部分——OkHttp
  • Unity游戏开发中的3D数学基础详解