Sql server 具有自连接的多参数选择

Sql server 具有自连接的多参数选择,sql-server,self-join,Sql Server,Self Join,抱歉,标题不够清晰,但我不知道如何总结我的请求: 如果有人想提出建议,我会修改它 回到问题上来: 我想将一些现在在经典ASP中执行的例程转换为T-SQL 有两个表: Users and Messages 用户是这样的: ID USERID ROLE CLASS PARENTOF SUBJECTS 13 CarolineW parent BillC,JohnC 12 IsabelF pa

抱歉,标题不够清晰,但我不知道如何总结我的请求: 如果有人想提出建议,我会修改它

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

有两个表:

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:

ie:ID11信息以(班级)1a为目标,教师和家长为发送人: 这意味着信息必须转发给1a班学生的所有老师和家长

信息ID13必须发送给4a班的所有家长和学生、JohnC的家长和他本人(因为是学生)以及JohnT的学生(因为是老师)

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

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

目前,我已经在经典asp中使用了一些for/next循环来执行这样的结果,但我想知道T-SQL解决方案是否更高效、更优雅,因为我在T-SQL方面的知识非常有限,到目前为止,我只能 提取发送给学生或家长但使用两个不同查询的消息(虽然几乎相同,但缺少一些控件),目标是使用单个查询

还是不可能

你能指出实现这一结果的途径吗

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

谢谢你的建议和评论

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

ie:ID11信息以(班级)1a为目标,教师和家长为发送人: 这意味着信息必须转发给1a班学生的所有老师和家长

信息ID13必须发送给4a班的所有家长和学生、JohnC的家长和他本人(因为是学生)以及JohnT的学生(因为是老师)

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

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

目前,我已经在经典asp中使用了一些for/next循环来执行这样的结果,但我想知道T-SQL解决方案是否更高效、更优雅,因为我在T-SQL方面的知识非常有限,到目前为止,我只能 提取发送给学生或家长但使用两个不同查询的消息(虽然几乎相同,但缺少一些控件),目标是使用单个查询

还是不可能

你能指出实现这一结果的途径吗

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

谢谢你的建议和评论


Joe

您可能会调查数据库规范化,因为给定的结构总是让人不愉快。嗨!谢谢你的评论。。但你说的数据库规范化是什么意思?从我所读到的关于规范化的主要原则是避免冗余,对于采用的结构,信息只设置了一次:可以给我一些更多的提示吗?TKS