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

相关推荐
范纹杉想快点毕业几秒前
从单片机基础到程序框架:构建嵌入式系统的完整路径
数据库·mongodb
数据知道3 分钟前
PostgreSQL性能优化:如何定期清理无用索引以释放磁盘空间(索引膨胀监控)
数据库·postgresql·性能优化
喵叔哟4 分钟前
67.【.NET8 实战--孢子记账--从单体到微服务--转向微服务】--新增功能--分摊功能总体设计与业务流程
数据库·微服务·架构
tryCbest5 分钟前
Oracle查看存储过程
数据库·oracle
咩咩不吃草11 分钟前
【MySQL】表和列、增删改查语句及数据类型约束详解
数据库·mysql·语法
不懒不懒11 分钟前
【MySQL 实战:从零搭建规范用户表(含完整 SQL 与避坑指南)】
数据库
ID_1800790547315 分钟前
Python结合淘宝关键词API进行商品价格监控与预警
服务器·数据库·python
数据知道29 分钟前
PostgreSQL 故障排查:万字详解如何找出数据库中的死锁
数据库·postgresql
AI_567837 分钟前
阿里云OSS成本优化:生命周期规则+分层存储省70%
运维·数据库·人工智能·ai
choke23340 分钟前
软件测试任务测试
服务器·数据库·sqlserver