You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何查询含复合键的联结表:获取用户id1的待处理请求

查询MySQL中待处理的用户连接请求

要获取指定用户(id1)的所有待处理请求,核心是筛选出从id1发出的请求,且对方尚未发起反向记录的条目。以下是两种可行的SQL实现方式:

方法一:使用NOT EXISTS子查询

这种方式通过子查询检查反向记录是否存在,逻辑直观清晰:

SELECT uc.*
FROM user_connections uc
WHERE uc.user_from = {你的id1值}
  AND NOT EXISTS (
    SELECT 1
    FROM user_connections uc_reverse
    WHERE uc_reverse.user_from = uc.user_to
      AND uc_reverse.user_to = uc.user_from
  );

逻辑说明

  • 外层查询先取出所有由id1发出的请求
  • 子查询验证是否存在对方(user_to)向id1发起的反向记录,如果不存在,就说明该请求还处于待处理状态

方法二:使用LEFT JOIN筛选空值

通过左连接关联反向记录,再筛选出反向记录不存在的条目:

SELECT uc.*
FROM user_connections uc
LEFT JOIN user_connections uc_reverse
  ON uc_reverse.user_from = uc.user_to
  AND uc_reverse.user_to = uc.user_from
WHERE uc.user_from = {你的id1值}
  AND uc_reverse.user_from IS NULL;

逻辑说明

  • 左连接会保留所有id1发出的请求,无论是否有反向记录
  • 当反向记录不存在时,uc_reverse的字段会为NULL,通过这个条件筛选出待处理请求

优化建议

如果user_connections表数据量较大,建议给user_from和user_to创建联合索引,能大幅提升查询效率:

CREATE INDEX idx_user_from_to ON user_connections(user_from, user_to);

内容的提问来源于stack exchange,提问作者Elisha

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 19:55:13