首页 新闻 搜索 专区 学院

求一个sql语句,在线等,急着要,谢谢各位大虾...

0
[已解决问题] 解决于 2010-08-17 11:54

id            schoolId          schoolName              course

1             1                     崇州电子职业学院        广告设计组

2             1                     崇州电子职业学院       软件工程组

这个是教师组表,course

 

一个教师可以属于多个组,如软件工程组,软件工程组,等等,

select  username,courseid,course from users

username           courseid(varchar)           course

test                      1,2                   广告设计组,软件工程组

张三                      1                      广告设计组

李四                      2                      软件工程组

,现在我要的结果是如果我选择广告设计组,结果是

test                      1,2                   广告设计组,软件工程组

张三                      1                      广告设计组

,如果我选择的是软件工程组,

test                      1,2                   广告设计组,软件工程组

李四                      2                      软件工程组

 如果我选择了广告设计组和软件工程组,那么结果应该是:

 

test                      1,2                   广告设计组,软件工程组

test                      1,2                   广告设计组,软件工程组

张三                      1                      广告设计组

李四                      2                      软件工程组

 

,该怎么写sql语句啊 ,我用了in和exists都不是我要的结果,急等,谢谢

lovemc的主页 lovemc | 初学一级 | 园豆:13
提问于:2010-08-16 11:24
< >
分享
最佳答案
0

这是一个合并行的问题:

SqlServer的解决方案:

select  username,

courseids = STUFF((select ','+courseid from users where username = U.username FOR XML PATH(' '),1,1,''),

 courses = STUFF((select ','+course from users where course= U.courseFOR XML PATH(' '),1,1,'') from users U group by users;

nabber | 菜鸟二级 |园豆:479 | 2010-08-16 16:51
谢谢,我的数据库结构都修改了
lovemc | 园豆:13 (初学一级) | 2010-08-17 10:19
其他回答(4)
0

select * from users where course in ('广告设计组')

或者

select * from users where courseid in (1)

 

难道不行?

jowo | 园豆:2834 (老鸟四级) | 2010-08-16 11:34
不行,我试过了...
支持(0) 反对(0) lovemc | 园豆:13 (初学一级) | 2010-08-16 11:40
0

是不是只有这2中组呢,如果是的话,在选择2个的时候直接传一个特殊的值,然后存储过程判断,如果是特殊的值就

select * from users

不然就判断。

清海扬波 | 园豆:823 (小虾三级) | 2010-08-16 12:09
0

为啥表要设计成这样呢

竹子青青 | 园豆:214 (菜鸟二级) | 2010-08-16 12:29
是一个多的关系,我也不知道该怎么设计。。。,一个教师可以属于多个教师组.....立体、如数学组,英语组,生物组,或者更多...... users 表id, courseId varchar(50),course (varchar(200)), course表 id schoolId schoolName ,course varchar(200), 该怎么修改啊
支持(0) 反对(0) lovemc | 园豆:13 (初学一级) | 2010-08-16 13:02
应该是多对多。。。。 一个教师可以属于多个组,一个组可以有多个教师,。。。。
支持(0) 反对(0) lovemc | 园豆:13 (初学一级) | 2010-08-16 13:06
要修改数据库了,呵呵...教师和组是多对多的关系....呵呵。。。。。
支持(0) 反对(0) lovemc | 园豆:13 (初学一级) | 2010-08-16 14:11
0

兄弟这事简单,你用charindex函数就可以 举个例子,比如你想要广告设计组和软件工程组,写法如下:

select * from users where charindex('1',courseid)>0 OR charindex('2',courseid)>0

这样就可以解决问题。但是接下来还要注意一点就是编号为11 也包含1,这样话,就需要个小技巧,在courseid两边分别加逗号,在查找的编号两边加引号,这样用charindex就不会有问题了

觉知的凡夫 | 园豆:468 (菜鸟二级) | 2010-08-16 15:13
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册