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

MySQL查询ceID=1113且无其他ceID关联记录的用户

问题背景

现有usersTable表,存储用户和关联ceID的对应关系,表中样本数据如下:

+--------------------+------+
| user_ID            | ceID |
+--------------------+------+
| 20201011_557141020 | 1136 |
| 20201118_936245153 | 1113 |
| 20200224_856349817 | 1113 |
| 20201021_979024023 | 1139 |
| 20201021_979024023 | 1146 |
| 20201104_500741407 | 1139 |
| 20201021_979024023 | 1147 |
| 20201021_979024023 | 1113 |
| 20210412_238528636 | 1118 |
| 20220523_576943860 | 1113 |
| 20220523_576943860 | 1119 |
| 20220522_893258175 | 1119 |
+--------------------+------+

需求为查询所有ceID=1113,且不存在任何其他ceID关联记录的用户。
直接查询ceID=1113会返回4个用户,其中20201021_979024023、20220523_576943860两个用户同时关联了其他ceID,需要排除,最终期望结果为:

+--------------------+------+
| user_ID            | ceID |
+--------------------+------+
| 20201118_936245153 | 1113 |
| 20200224_856349817 | 1113 |
+--------------------+------+
原有SQL错误分析

你编写的SQL如下:

select user_ID from clubUsers where ceID=1113 and not exists (select user_ID clubUsers where ceID != 1113) ;

存在两个核心问题:

  • 子查询语法错误:缺少FROM关键字,select user_ID clubUsers应为select user_ID from clubUsers
  • 子查询未做关联:子查询没有和外层查询按user_ID绑定,会全局判断「表中是否存在任意ceID≠1113的记录」,只要表中存在一条其他ceID的记录,NOT EXISTS条件就永远不成立,无法按用户维度判断是否有其他关联ceID。
正确实现方案

方案1:修正关联逻辑的NOT EXISTS写法

通过子查询关联同一个用户的记录,判断该用户是否存在其他ceID的关联条目:

SELECT DISTINCT user_ID, ceID
FROM usersTable t1
WHERE ceID = 1113
AND NOT EXISTS (
    SELECT 1
    FROM usersTable t2
    WHERE t2.user_ID = t1.user_ID
      AND t2.ceID <> 1113
);

注:如果你的实际表名是clubUsers,把SQL里的usersTable替换为对应表名即可。

方案2:分组聚合写法

按用户ID分组,通过聚合条件筛选出仅关联ceID=1113的用户,逻辑更直观:

SELECT user_ID, 1113 AS ceID
FROM usersTable
GROUP BY user_ID
HAVING COUNT(DISTINCT ceID) = 1
AND MIN(ceID) = 1113;

两种写法执行后都会返回你期望的2条用户记录,自动排除同时关联了其他ceID的用户。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 05:36:25