具有自连接的多参数选择

时间:2014-11-29 17:12:53

标签: sql-server self-join

抱歉在标题中不够清楚,但我不知道如何总结我的要求: 如果有人想建议,我会修改它。

回到问题: 我想将现在在经典ASP中执行的一些例程转换为T-SQL

有2个表:

Users and Messages

用户是这样的:

ID  USERID      ROLE        CLASS       PARENTOF        SUBJECTS
13  CarolineW   parent                  BillC,JohnC    
12  IsabelF     parent                  AlexG,AnnG    
11  SaraW       teacher                                 MATH-3a,MATH-4a,MATH-5b,MATH-1a
10  JohnT       teacher                                 ENG-4a,GEO-2a,GEO-1a
9   MatildaW    student     4a       
8   JohnC       student     2a       
7   AlexG       student     4a       
6   CamillaH    student     4a       
5   BillC       student     2a       
4   AnnG        student     1a 
3   KarlK       admin       
2   AnnF        control
1   BillT       superadmin

虽然其他消息包含以下字段:

ID  SELECTOR            SENDTO                  SENDER       ANSWERED
13  4a,JohnC,JohnT      parent,student          admin        CarolineW,IsabelF
12  4a,4b,SaraW         parent                  ....         Null
11  1a                  teacher,parent          SaraW        JohnT,IsabelF                                 
10  1a                  teacher,admin           IsabelF      Null 

.....

规则: 所有用户都可以向其他人发送消息,设置2个参数: 作为目标的选择器 SendTo定义与目标的连接:

即:消息ID11将(类)1a作为目标,将教师和父母作为SendTo: 这意味着必须将信息转发给1a级学生的所有教师和家长

消息ID13必须发送给所有家长和4a级学生,父母和JohnC的学生(因为是学生)和JohnT的学生(因为是教师)。

另一方面,由于学校电子板上也有消息,我希望每个用户在访问其帐户时都可以阅读根据上述规则发给他的所有消息。

最后会列出尚未回复该消息的所有用户。

目前我已经使用经典asp中的一些for / next循环执行了这样的结果但是我想知道T-SQL解决方案是否更高效,而且肯定更优雅,因为我对T-SQL的了解非常有限所以我只能做到这一点 提取给学生或父母的消息,但使用2个不同的查询,虽然几乎相同,但缺少一些控件和目标是只有一个查询

还是不可能?

可以指出实现这种结果的路径吗?

考虑到实际例程的用户数量(少于500个),虽然效率肯定不高但不会对服务器产生很大影响:因此,主要目标不是为了提高性能而是为了学习目的。

感谢您的任何建议和评论。

规则: 所有用户都可以向其他人发送消息,设置2个参数: 作为目标的选择器 SendTo定义与目标的连接:

即:消息ID11将(类)1a作为目标,将教师和父母作为SendTo: 这意味着必须将信息转发给1a级学生的所有教师和家长

消息ID13必须发送给所有家长和4a级学生,父母和JohnC的学生(因为是学生)和JohnT的学生(因为是教师)。

另一方面,由于学校电子板上也有消息,我希望每个用户在访问其帐户时都可以阅读根据上述规则发给他的所有消息。

最后会列出尚未回复该消息的所有用户。

目前我已经使用经典asp中的一些for / next循环执行了这样的结果但是我想知道T-SQL解决方案是否更高效,而且肯定更优雅,因为我对T-SQL的了解非常有限所以我只能做到这一点 提取给学生或父母的消息,但使用2个不同的查询,虽然几乎相同,但缺少一些控件和目标是只有一个查询

还是不可能?

可以指出实现这种结果的路径吗?

考虑到实际例程的用户数量(少于500个),虽然效率肯定不高但不会对服务器产生很大影响:因此,主要目标不是为了提高性能而是为了学习目的。

感谢您的任何建议和评论。

0 个答案:

没有答案