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需要处理更多的数据,尤其是当左表比右表大得多时。这可能会导致查询效率降低。

相关推荐
NineData1 小时前
数据库迁移总踩坑?用 NineData 迁移评估,提前识别所有兼容性风险
数据库·程序员·云计算
阿里云大数据AI技术1 小时前
用 SQL 调大模型?Hologres + 百炼,让数据开发直接“对话”AI
sql·llm
赵渝强老师4 小时前
【赵渝强老师】PostgreSQL中表的碎片
数据库·postgresql
全栈老石8 小时前
拆解低代码引擎核心:元数据驱动的"万能表"架构
数据库·低代码
倔强的石头_1 天前
kingbase备份与恢复实战(二)—— sys_dump库级逻辑备份与恢复(Windows详细步骤)
数据库
jiayou642 天前
KingbaseES 实战:深度解析数据库对象访问权限管理
数据库
李广坤3 天前
MySQL 大表字段变更实践(改名 + 改类型 + 改长度)
数据库
爱可生开源社区4 天前
2026 年,优秀的 DBA 需要具备哪些素质?
数据库·人工智能·dba
随逸1774 天前
《从零搭建NestJS项目》
数据库·typescript
加号35 天前
windows系统下mysql多源数据库同步部署
数据库·windows·mysql