社区
疑难问题
帖子详情
超难...一个多对多查询的问题
benwang6
2006-11-17 10:25:30
一个表有这样的数据
user_id role
-----------|---------
1 | student
1 | writer
2 | writer
我想查询角色(role)既是student同时又是writer的user_id,该怎么查
...全文
268
17
打赏
收藏
超难...一个多对多查询的问题
一个表有这样的数据 user_id role -----------|--------- 1 | student 1 | writer 2 | writer 我想查询角色(role)既是student同时又是writer的user_id,该怎么查
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
17 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
wf105
2006-11-18
打赏
举报
回复
hhhdyj(萤火虫) 是对的
select user_id from table where role='student'or role='writer'group by user_id
having count(distinct role)> 1 这个没问题的
gc_ding
2006-11-18
打赏
举报
回复
百万级的数据量,上面查询的效率还可以,不过如果你的OR条件越来越多的话,可考虑用IN :)
另外提供以下小建议给楼主参考:
1。select * from t1 where f1 in (select f1 from t2 where t2.fx='x'),
其中子查询的where里的条件不受外层查询的影响,这类查询一般情况下,自动优化会转成exist语句,也就是效率和exist一样
2。select * from t1 where f1 in (select f1 from t2 where t2.fx=t1.fx),
其中子查询的where里的条件受外层查询的影响,这类查询的效率要看相关条件涉及的字段的索引情况和数据量多少,一般认为效率不如exists
3。当只显示一个表的数据如A,关系条件只一个如ID时,使用IN会更快:
select * from A where id in (select id from B)
4。当只显示一个表的数据如A,关系条件不只一个如ID,col1时,使用IN就不方便了,
可以使用EXISTS:
select * from A where exists (select 1 from B where id = A.id and col1 = A.col1)
5。当只显示两个表的数据时,使用IN,EXISTS都不合适,要使用连接:
select * from A left join B on id = A.id
砸死牛顿的苹果
2006-11-18
打赏
举报
回复
up hhhdyj(萤火虫) 的也完全正确
砸死牛顿的苹果
2006-11-17
打赏
举报
回复
假如user_id 和 role 有做过 联合唯一键 ET的做法是完全正确的
而且效率也算比较快 算法复杂度 属于N的一次方
benwang6
2006-11-17
打赏
举报
回复
阿麦兄弟,两条 1 的role 都是 writer or student不可能出现了,因为我加了两个字段的unique,谢谢啊
benwang6
2006-11-17
打赏
举报
回复
小刀惋心,谢谢你的行内视图查询,不过这样查的化不太好扩展,比如我查 writer and student and teache and reader ...
E.T兄弟的查询我试了,果然可以查,而且增加条件也方便,我对E.T兄弟只有一个字要说,那就是“佩服佩服”
另外请教E.T兄弟,你对这个查询的效率怎么看?我如果是百万级的数据量如何?谢谢啊
hhhdyj
2006-11-17
打赏
举报
回复
DECLARE @tb TABLE([user_id] int, [role] varchar(10))
INSERT INTO @tb
SELECT 1, 'student'
UNION ALL SELECT 1, 'writer'
UNION ALL SELECT 2, 'writer'
SELECT [user_id] FROM @tb WHERE role IN('student', 'writer')
GROUP BY [user_id] HAVING COUNT(DISTINCT role) > 1
iamx
2006-11-17
打赏
举报
回复
gc_ding(E.T) 的方法是不行的,如果有两条 1 的role 都是 writer or student时就有问题了.
iamx
2006-11-17
打赏
举报
回复
更正:
select distinct a.user_id
from abc a
where a.role = 'student' and exist (select 1 from abc b where a.user_id = b.user_id and b.role = 'writer')
iamx
2006-11-17
打赏
举报
回复
select a.user_id
from abc a
where a.role = 'student' and exist (select 1 from abc b where a.user_id = b.user_id and b.role = 'writer')
砸死牛顿的苹果
2006-11-17
打赏
举报
回复
或者只取 不重复的 id
select distinct user_id from abc where role='student' and user_id in (select user_id where role='writer')
iamx
2006-11-17
打赏
举报
回复
select distinct a.user_id
from abc a, abc b
where a.user_id = b.user_id and a.role = 'student' and b.role = 'writer'
砸死牛顿的苹果
2006-11-17
打赏
举报
回复
select * from abc where role='student' and user_id in (select user_id where role='writer')
gc_ding
2006-11-17
打赏
举报
回复
不好意思,写漏了
select user_id from abc
where role ='student' or role ='writer'
group by [user_id]
having count(*) = 2
benwang6
2006-11-17
打赏
举报
回复
那这样查询结果不就是这1和2么,我只要1这个结果怎么办
冷箫轻笛
2006-11-17
打赏
举报
回复
create table users
(
[user_id] int,
role varchar(20)
)
insert into users select 1,'student'
insert into users select 1,'writer'
insert into users select 2,'writer'
select [user_id]
from users
where role = 'student' or role = 'writer'
group by [user_id]
having count(1) = 2
--结果
1
gc_ding
2006-11-17
打赏
举报
回复
select user_id from 表名
where role ='student' or role ='writer'
关于mybatis一对多
查询
collection标签只能查出一条记录的
问题
在电商项目中遇到MyBatis一对多
查询
只返回
一个
详细信息的
问题
,通过调整resultMap中的collection字段,将id改为result,解决了UUID作为id时的重复
问题
。
MyBatis一对多
查询
方式
本文详细介绍了MyBatis中一对多
查询
的实现。先阐述了一对多关系的数据表设计和实体类设计,接着说明通过MyBatis的
标签实现
查询
的步骤,包括定义、编写SQL
查询
和Java接口。还提及
查询
结果,以及针对性能
问题
的优化方法,如一次性加载和分步
查询
。
针对Mybatis针对一对多
查询
,创建空对象的
问题
本文介绍如何解决MyBatis在进行一对多
查询
时创建空对象的
问题
。通过使用notNullColumn标签,可以避免在子节点数据为空时创建不必要的空对象,从而优化
查询
结果。
使用Pinecone和OpenAI实现多
查询
RAG:解锁智能信息检索的潜力
本文介绍结合Pinecone和OpenAI实现多
查询
检索 - 生成(RAG)的解决方案。多
查询
检索策略可提高信息检索的精确度和覆盖面,文中涵盖环境设置、安装使用、配置LangSmith等内容,还给出代码示例及常见
问题
解决方案,能助力构建强大的多
查询
RAG系统。
RRF融合多
查询
结果:提升检索召回率与推荐多样性
本文介绍了RAG中的多
查询
和结果融合。多
查询
策略将用户
问题
改写生成多个
查询
,能从不同角度理解用户意图,提高检索召回率和推荐多样性。多
查询
结果融合可采用RRF方法,它能将多个排名结果融合成统一排名,具有无需调优、稳健等优势,能提升系统整体性能。
疑难问题
22,296
社区成员
121,728
社区内容
发帖
与我相关
我的任务
疑难问题
MS-SQL Server 疑难问题
复制链接
扫一扫
分享
社区描述
MS-SQL Server 疑难问题
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章