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

相关推荐
正在走向自律9 分钟前
X2Doris是SelectDB可视化数据迁移工具,安装与部署&使用手册,轻松进行大数据迁移
数据库·数据迁移·selectdb·x2doris·数据库迁移工具
tuokuac13 分钟前
SQL中的LEFT JOIN
数据库·sql
tuokuac17 分钟前
SQL中的GROUP BY用法
数据库·sql
爱吃小土豆豆豆豆22 分钟前
登录校验一
java·大数据·数据库
Albert Tan1 小时前
Oracle EBS 缺少adcfgclone.pl文件
数据库·oracle
摸鱼仙人~4 小时前
Redis 数据结构全景解析
数据结构·数据库·redis
t198751286 小时前
解决MySQL删除/var/lib/mysql下的所有文件后无法启动的问题
数据库·mysql·adb
大佐不会说日语~9 小时前
Redis高频问题全解析
java·数据库·redis
会飞的灰大狼9 小时前
初识数据库
数据库