使用MySQL,返回特定的用户ID';s位于具有重复ID的表中';s使用第二列作为标准
以下是场景: 我有一张像这样的桌子: 表名称:用户活动使用MySQL,返回特定的用户ID';s位于具有重复ID的表中';s使用第二列作为标准,mysql,Mysql,以下是场景: 我有一张像这样的桌子: 表名称:用户活动 USER_ID | ACTIVITY_CODE ----------------------- 1111 | 013 ----------------------- 1111 | 112 ----------------------- 2222 | 014 ----------------------- 3333 | 028 ----------------------- 3333 | 245 ---
USER_ID | ACTIVITY_CODE
-----------------------
1111 | 013
-----------------------
1111 | 112
-----------------------
2222 | 014
-----------------------
3333 | 028
-----------------------
3333 | 245
-----------------------
3333 | 468
-----------------------
4444 | 079
-----------------------
4444 | 028
-----------------------
5555 | 157
-----------------------
5555 | 523
-----------------------
6666 | 081
-----------------------
7777 | 067
-----------------------
7777 | 624
-----------------------
这是一个使用MySQL的Oracle数据库,ACTIVITY_代码是一个CHAR字段。我需要提取活动代码以0开头,而没有活动代码以任何其他数字开头的用户ID
所以
提供所有活动代码以0开头的用户标识,但也包括活动代码以0开头的用户标识和其他活动代码以其他数字开头的用户标识
如何仅返回仅具有以0开头的活动\ U代码的用户
我需要它是一个单一的查询(子查询很好),我不能创建视图
可以这样做吗?使用左连接过滤不符合条件的用户
SELECT user_id
FROM user_activities ua1
LEFT JOIN (SELECT DISTINCT user_id
FROM user_activities
WHERE activity_code NOT LIKE '0%') ua2
ON ua1.user_id = ua2.user_id
WHERE ua1.activity_code LIKE '0%'
AND ua2.user_id IS NULL
您也可以通过“notin”和使用正则表达式来实现这一点
select distinct user_id from user_activities
where activity_code like '0%'
and user_id not in (select user_id
from user_activities
where activity_code REGEXP '^[1..9]')
戴上我的帽子,您也可以简单地对activity_代码进行min/max ASCII排序,因为您已经用0填充了它
因此,这将是最简单的查询
select user_id from user_activities
group by user_id
having min(activity_code) like '0%'
and max(activity_code) like '0%';
优秀的解决方案。我特别喜欢最小/最大解决方案。谢谢你的帮助。这两种解决方案都非常有效。这个解决方案对我来说也很有效,并且反映了其他人在Access中提出的解决方案,所以这可能是他们最容易立即掌握的解决方案。谢谢你的帮助。
select user_id from user_activities
group by user_id
having min(activity_code) like '0%'
and max(activity_code) like '0%';