好的,所以我想用一个相当复杂的语句填充gridview,我不知道怎么弄,我甚至不知道它是否可能。涉及五个表和一个视图,这些不是表中的所有字段,只是为了使事情更清楚,我只放置必需的字段。
学生表: -
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
现在,考虑到当一名工作人员登录时,他的用户名存储在会话Session["Username"]
中,我想从数据库中提取的是用户(仅限学生)上传的所有调查属于当前用户部门的专业化。考虑到所有关系(外键)都已设置,我应该使用的是什么SQL查询?或至少是方法。
答案 0 :(得分:1)
简而言之:首先尝试找出表格之间的联系(FK和PK - 对于一个起点,看起来像Specialization,Staff和Department表确实有关系。)
然后提出有效的查询。尝试将其转换为视图,并根据记录的数量来衡量性能。
虽然这是一个如何进行的准则,但我相信这会有所帮助。
答案 1 :(得分: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)))
答案 2 :(得分:0)
我可以问为什么用户和员工之间没有另一张桌子?
它可能被称为UserStaffTable,它将两个id列作为复合键,还有两个额外的列引用专门化和departmenttable?这样,您始终拥有属于工作人员的学生列表,您可以根据专业化和/或部门对其进行过滤。
这将允许您执行连接而不是子查询。
根据这个SO answer子查询的速度较慢,如果这很重要的话。