表多对多关系的查询

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

一个用户可以属于多个组,一组里拥有多个用户
现在要列出某一用户所在的所有组里所有其它成员..
...全文
136 12 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
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'

34,838

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧