1

好的,所以我想用一个相当复杂的语句填充网格视图,我不知道如何获得,我什至不知道它是否可能。涉及五个表和一个视图,这些不是表中的所有字段,但为了使事情更清楚,我只放置了必填字段。

学生表:-

Student_ID
Specialization_ID

专业化表:-

ID
Specialization_Name
Department_ID

员工表:-

ID
Staff_ID 
Department_ID

部门表:-

ID
Department_Name

调查表Username:-(是上传者)

ID
Username

用户视图:-(这里的Username,Password取自学生表和员工表)

Username
Password
UserType

这就是我创建视图的方式:-

CREATE View [Users] as
Select Student_ID as Username, Password,'STU' as UserType from Student
union
Select Staff_ID, Password, 'STF' as UserType from Staff

现在,考虑到当工作人员登录时,他的用户名存储在 sessionSession["Username"]中,我想从数据库中提取的所有调查都是由具有属于当前用户的专业的用户(仅限学生)上传的部。考虑到所有关系(外键)都已设置,我应该使用什么 sql 查询?或至少方法。

4

3 回答 3

1

简而言之:首先尝试找出表之间的联系(FK 和 PK - 首先,看起来专业化、员工和部门表确实有关系)。

然后提出有效的查询。尝试将其转换为视图,并根据记录数衡量性能。

尽管这是如何进行的指导方针,但我很确定这会有所帮助。

于 2012-12-13T23:50:33.680 回答
0

请问为什么用户和员工之间没有另一张桌子?

它可能被称为 UserStaffTable,它将两个 id 列作为复合键,以及两个引用专业化和部门表的额外列?这样,您始终拥有属于工作人员的学生列表,并且您可以根据专业和/或部门过滤掉他们。

这将允许您执行联接而不是子查询。

根据this SO answer,如果这很重要,子查询会更慢。

于 2012-12-14T03:02:12.317 回答
0

好的,所以我在一个小时的磨削后使用子查询解决了它......谢谢大家的帮助。

    Select * From Survey where Username IN 
(Select Student_ID from Student where Specialization_ID IN 
(Select ID from Specialization where Department_ID = 
(Select Department_ID from Staff where Staff_ID =@Username)))
于 2012-12-14T01:31:33.327 回答