求一SQL语句

red_berries 2007-12-10 03:38:55
学生表
id:学号 name:姓名
选课表:
id:课程号 sid:学号(与学生表中id外键关联)

求一语句找出所有的选同一课程的学生对姓名(不能有重复的,也不能出现A,B B,A 这样的学生对),谢谢了
...全文
60 12 打赏 收藏 举报
写回复
12 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
red_berries 2007-12-10
好了,原来 distinct不用加括号的。。。。还有字条串也能用< >  谢谢你了
  • 打赏
  • 举报
回复
dawugui 2007-12-10
select distinct t1.name , t2.name from
(select a.name , b.id from 学生表 a , 选课表 b where a.id = b.sid ) t1,
(select a.name , b.id from 学生表 a , 选课表 b where a.id = b.sid ) t2
where t1.id = t2.id and t1.name < t2.name
order by t1.id , t1.name , t2.name
  • 打赏
  • 举报
回复
red_berries 2007-12-10
还有点小问题,就是
学生 A B 选了 a,学生 A B 也选了 b
这时会打出
A B
A B
单项可以加distinct 两个怎么加啊?
  • 打赏
  • 举报
回复
dawugui 2007-12-10
--加个order by
select t1.name , t2.name from
(select a.name , b.id from 学生表 a , 选课表 b where a.id = b.sid ) t1,
(select a.name , b.id from 学生表 a , 选课表 b where a.id = b.sid ) t2
where t1.id = t2.id and t1.name < t2.name
order by t1.id , t1.name , t2.name
  • 打赏
  • 举报
回复
red_berries 2007-12-10
我试试啊,这不是原题,不过是这个意思,我按你的修改一下看对不
  • 打赏
  • 举报
回复
dawugui 2007-12-10

--如果A,B和B,A算重复的话,不要,就用t1.name < t2.name
select t1.name , t2.name from
(select a.name , b.id from 学生表 a , 选课表 b where a.id = b.sid ) t1,
(select a.name , b.id from 学生表 a , 选课表 b where a.id = b.sid ) t2
where t1.id = t2.id and t1.name < t2.name
  • 打赏
  • 举报
回复
red_berries 2007-12-10
select t1.name , t2.name from
(select a.name from 学生表 a , 选课表 b where a.id = b.sid and b.id = '某课程号') t1,
(select a.name from 学生表 a , 选课表 b where a.id = b.sid and b.id = '某课程号') t2
where t1.name <> t2.name

你这个如果 学生A,B都选了课程a,好像会打出
A B
B A

怎么让打只打出
A B
  • 打赏
  • 举报
回复
dawugui 2007-12-10
--上面错了,a.id = b.id 改为 t1.id = t2.id
select t1.name , t2.name from
(select a.name , b.id from 学生表 a , 选课表 b where a.id = b.sid ) t1,
(select a.name , b.id from 学生表 a , 选课表 b where a.id = b.sid ) t2
where t1.id = t2.id and t1.name <> t2.name

  • 打赏
  • 举报
回复
dawugui 2007-12-10
select t1.name , t2.name from
(select a.name , b.id from 学生表 a , 选课表 b where a.id = b.sid ) t1,
(select a.name , b.id from 学生表 a , 选课表 b where a.id = b.sid ) t2
where a.id = b.id and t1.name <> t2.name

  • 打赏
  • 举报
回复
red_berries 2007-12-10
我的意思是选出选同一课程的学生对,这个同一课程不是固定的,
  • 打赏
  • 举报
回复
dawugui 2007-12-10
select t1.name , t2.name from
(select a.name from 学生表 a , 选课表 b where a.id = b.sid and b.id = '某课程号') t1,
(select a.name from 学生表 a , 选课表 b where a.id = b.sid and b.id = '某课程号') t2
where t1.name <> t2.name
  • 打赏
  • 举报
回复
dawugui 2007-12-10
A B
A C
B C
这样?
  • 打赏
  • 举报
回复
相关推荐
发帖
MS-SQL Server

3.3w+

社区成员

MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
帖子事件
创建了帖子
2007-12-10 03:38
社区公告
暂无公告