高分求一条sql语句

mydearbaby 2011-09-14 11:00:46
两张表 学校表 老师表

学校开课类别有 java开发 c++开发 c#开发 .net开发 平面设计 网络 等等 200多个类别

老师A 主管 .net开发 和 平面设计 c++开发 等类别 可能会有很多 比如100个

如何查出在老师A管理类别下的学校

求一条高效语句

不要用 or 拼接语句 因为 老师A可能会主管很多类别 or语句会很长
...全文
181 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
超级僵尸 2011-09-14
  • 打赏
  • 举报
回复
其实你的那段代码根本没有充分使用SQL语句优点,其实你要找的就是教师表和学校表的交集,没必要将每个课程使用like语句都列出来,只需依靠他们的共有属性课程类别进行内连接查找。
mydearbaby 2011-09-14
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 fredrickhu 的回复:]
看看你写的语句 怎么OR很长了?
[/Quote]


就是不知道怎么不要or这么长才想找一条比较短的
--小F-- 2011-09-14
  • 打赏
  • 举报
回复
这个表结构设计得。。。那要有 10000个不写死了
--小F-- 2011-09-14
  • 打赏
  • 举报
回复
看看你写的语句 怎么OR很长了?
geniuswjt 2011-09-14
  • 打赏
  • 举报
回复

--字段按你的表自行更改
;with cte as(
select 课程 from 老师表 where 老师='A'
)
select 学校 from 学校表 t
where exists(select 1 from cte where 课程=t.课程)
[Quote=引用楼主 mydearbaby 的回复:]
两张表 学校表 老师表

学校开课类别有 java开发 c++开发 c#开发 .net开发 平面设计 网络 等等 200多个类别

老师A 主管 .net开发 和 平面设计 c++开发 等类别 可能会有很多 比如100个

如何查出在老师A管理类别下的学校

求一条高效语句

不要用 or 拼接语句 因为 老师A可能会主管很多类别 or语句会很长
[/Quote]
超级僵尸 2011-09-14
  • 打赏
  • 举报
回复
select 老师表.开课类别,学校表.学校 from 学校表 join 老师表 on 学校表.开课类别=教师表.开课类别
where 老师表.老师=老师A GROUP BY 老师表.开课类别

这样老师A每门课下面的学校都会按不同开课类别显示出来。
mydearbaby 2011-09-14
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 dawugui 的回复:]
你两表应该有关联字段吧?

select m.* , n.* from 老师表 m , 学校表 n where m.关联字段 = n.关联字段

如果不行:


SQL code

建议你提供详细的资料:
例如表的结构,表之间的关系,测试数据,相关算法及需要的结果。
这样有助于我们理解你的意思,更主要的是能尽快让你获得答案或解决问题的方法。
[/Quote]


学校开课类别有 java开发 c++开发 c#开发 .net开发 平面设计 网络 等等 200多个类别

老师A 主管 .net开发 和 平面设计 c++开发 等类别 可能会有很多 比如100个


老师表 teacherid teachername teacherCoursesClass(老师主管的课程类别文本,多个 类似 0,1,2,3,4,5,6,7,)这样 最后有分号 防止类似like或者chinaindex查询时 1 11 111 这种情况(,1, ,11, ,111,)

学校表 schoolid schoolname schoolCoursesClass(学校开设的课程类别 同 teacherCoursesClass 字段一样的属性)

现在 比如 teacherCoursesClass 字段内容为 (0,1,2,3,4,5,6,7,8,9,10,11,12,13,)

要查出 开设有老师主管的课程类别的学校 两表无关联字段



或者我的表结构设计不合理?
mydearbaby 2011-09-14
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 qianjin036a 的回复:]
你怎么知道用 or 会很长呢?亮一亮你用 or 的写法.
[/Quote]


select ID,CompanyName,UserID,UserName,CompanyTel,CompanyLianXiRen,CompanyGroupID,CompanyUrl,CompanyAddTime,IsTop,IsPass,IsDelete,IsCommend,IsIndex,IsHot,ismove,isplay from MyEdu_Company where 1 = 1 and IsDelete=0 and ( CoursesClass like '%,1,%' or CoursesClass like '%,3,%' or CoursesClass like '%,9,%' or CoursesClass like '%,11,%' or CoursesClass like '%,12,%' or CoursesClass like '%,13,%' or CoursesClass like '%,14,%' or CoursesClass like '%,15,%' or CoursesClass like '%,16,%' or CoursesClass like '%,17,%' or CoursesClass like '%,18,%' or CoursesClass like '%,19,%' or CoursesClass like '%,20,%' or CoursesClass like '%,21,%' or CoursesClass like '%,22,%' or CoursesClass like '%,23,%' or CoursesClass like '%,24,%' or CoursesClass like '%,25,%' or CoursesClass like '%,26,%' or CoursesClass like '%,27,%' or CoursesClass like '%,28,%' or CoursesClass like '%,29,%' or CoursesClass like '%,30,%' or CoursesClass like '%,31,%' or CoursesClass like '%,32,%' or CoursesClass like '%,33,%' or CoursesClass like '%,34,%' or CoursesClass like '%,35,%' or CoursesClass like '%,36,%' or CoursesClass like '%,37,%' or CoursesClass like '%,38,%' or CoursesClass like '%,63,%' or CoursesClass like '%,64,%' or CoursesClass like '%,65,%' or CoursesClass like '%,66,%' or CoursesClass like '%,67,%' or CoursesClass like '%,68,%' or CoursesClass like '%,69,%' or CoursesClass like '%,70,%' or CoursesClass like '%,71,%' or CoursesClass like '%,72,%' or CoursesClass like '%,73,%' or CoursesClass like '%,74,%' or CoursesClass like '%,75,%' or CoursesClass like '%,76,%' or CoursesClass like '%,77,%' or CoursesClass like '%,78,%' or CoursesClass like '%,79,%' or CoursesClass like '%,80,%' or CoursesClass like '%,81,%' or CoursesClass like '%,82,%' or CoursesClass like '%,83,%' or CoursesClass like '%,84,%' or CoursesClass like '%,85,%' or CoursesClass like '%,86,%' or CoursesClass like '%,87,%' or CoursesClass like '%,88,%' or CoursesClass like '%,89,%' or CoursesClass like '%,90,%' or CoursesClass like '%,91,%' or CoursesClass like '%,92,%' or CoursesClass like '%,93,%' or CoursesClass like '%,171,%' ) order by Id desc
wnyxy001 2011-09-14
  • 打赏
  • 举报
回复

select * from 学校表 where 开课类别 in(select 管理类别 from 老师表

where 老师=老师A)
-晴天 2011-09-14
  • 打赏
  • 举报
回复
你怎么知道用 or 会很长呢?亮一亮你用 or 的写法.
dawugui 2011-09-14
  • 打赏
  • 举报
回复
你两表应该有关联字段吧?

select m.* , n.* from 老师表 m , 学校表 n where m.关联字段 = n.关联字段

如果不行:


建议你提供详细的资料:
例如表的结构,表之间的关系,测试数据,相关算法及需要的结果。
这样有助于我们理解你的意思,更主要的是能尽快让你获得答案或解决问题的方法。



mydearbaby 2011-09-14
  • 打赏
  • 举报
回复
楼上没有理解我的意思

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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