• 全部
  • 基础类
  • 应用实例
  • 新技术前沿

表多对多关系的查询

youzi520 2008-03-16 05:02:31
有3个表T1,T2,T3
T1为用户表,T2为组表,T3用户与组的关系表
t1
id user_name

t2
id group_name

t3
id user_id user_name group_id group_name

一个用户可以属于多个组,一组里拥有多个用户
现在要列出某一用户所在的所有组里所有其它成员..
...全文
82 点赞 收藏 12
写回复
12 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
youzi520 2008-03-31
谢谢
回复
ljasmine 2008-03-16


declare @GroupId int
select top 1 @GroupId=group_id from t3
where user_id=1
select * from t3 where group_id=@GroupId
回复
wjyj1461 2008-03-16
按照3楼的建议 这样写
select t3.u_id,t1.u_name from t1 right join t3 on t1.u_id=t3.u_id
where t3.g_id
in (select t3.g_id from t1 right join t3 on t1.u_id=t3.u_id where t1.u_name='a')
回复
JiangHongTao 2008-03-16
T3 问题,最好:useid,groupid
你的问题:
select distinct username from t3 a,t1 b where a.userid = b.id and 
exists(select 1 from t3 where userid = @id and groupid = a.groupid)
回复
-晴天 2008-03-16
表的设计不满足第三范式.只能满足第一范式.
维护上的因难是:
如果有一个用户更改Name,那你必须将T1表和T2表中的所有与该用户有关的记录中的Name都更改才行,否则就会出现不一致性.
而如果T2表中只有user_id和group_id两列,那么只要修改T1表中的一条记录就行了.
回复
-晴天 2008-03-16
楼主的T3表设计有问题,应设计成只有两个列:user_id和group_id,这样足够表达"一个用户可以属于多个组,一组里拥有多个用户"的意思了.
如果要查某个用户所属组的所有用户的Name,只要用下面句子就行了:

select user_name from T1
where T1.id in(select user_id from T2 where group_id in
(select group_id from T2 where user_id='你要查询的用户id'))

一般说来,用户id是唯一的,而姓名是不唯一的,因此在最里层的子查询中,应该直接给出用户id.
回复
youzi520 2008-03-16
我觉的在属性列存放多个ID很不好
回复
youzi520 2008-03-16
有问题嘛我的表设计 请明讲?
我觉的这样更好维护啊
回复
stardreammaple 2008-03-16
select * from t2 where group_name in ( select group_name from t3 where user_name='username')
回复
中国风 2008-03-16
--这样就可以了,楼主的数据库设计出现重复,不便于维护,user_name\ group_name(t3表,不应该出现,只需要存放ID就行了)
select * from t3 a
where exists(select 1 from t3 where a.group_id=group_id and [user_name]='AA')
回复
中国风 2008-03-16
只需要显示t3表时..
select 
c.*--指定显示列
from
t1 a
join
t3 b on a.ID=[user_id]
join
t3 c on c.group_id=b.group_id

where
a.[user_name]='AA'
回复
中国风 2008-03-16
select 
d.*,c.*--指定显示列
from
t1 a
join
t3 b on a.ID=[user_id]
join
t3 c on c.group_id=b.group_id
join
t1 d on d.ID=c.[user_id]

where
a.[user_name]='AA'
回复
相关推荐
发帖
MS-SQL Server
创建于2007-09-28

3.3w+

社区成员

MS-SQL Server相关内容讨论专区
申请成为版主
帖子事件
创建了帖子
2008-03-16 05:02
社区公告
暂无公告