SQL理解——INNER JOIN

文章目录

  • SQL语句
  • 需求
  • [使用 INNER JOIN 的原因](#使用 INNER JOIN 的原因)

SQL语句

java 复制代码
    /**
     * 查询两个用户之间共有的单聊 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需要处理更多的数据,尤其是当左表比右表大得多时。这可能会导致查询效率降低。

相关推荐
白远山22 分钟前
货运跑腿搬家平台开发实战:从需求分析到落地部署指南
数据库·数据挖掘·需求分析
geovindu34 分钟前
sql: Data Modeling Patterns
数据库·sql·设计模式·sqlserver
上海蓝色星球41 分钟前
蓝色星球NG-AIOS新型AI工业操作系统重磅发布——以本体智能为内核,重构“AI+制造“新范式
大数据·数据库·人工智能·机器人
瀚高PG实验室1 小时前
瀚高数据库如何克隆表
数据库·sql·postgresql·瀚高数据库
雨辰AI1 小时前
信创多租户项目 9 大踩坑|数据隔离失效、权限越权终极解决(金仓 / 达梦 / 高斯全库适配)
java·大数据·数据库·后端
严同学正在努力1 小时前
认识 SQL Server 的 T-SQL 语法
数据库·人工智能·ai·oracle·dba
EatFan1 小时前
我为什么把患者与病例从 1:1 改成 1:N?一次真实数据库模型重构记录
数据库·后端·重构·健康医疗·全栈
xujuzheng2 小时前
2026深圳小程序/App/AI智能体开发公司选型指南(附本地服务商盘点)
数据库·科技·微信小程序·小程序·uni-app
bksczm2 小时前
MySQL基础篇之表的增删查改(CRUD)细则
sql·mysql
不剪发的Tony老师2 小时前
DuckDB教程:常用文本函数
数据库·sql·数据分析·duckdb