ASP.NET SQL数据源组合了两个查询

时间:2018-02-16 16:25:16

标签: c# asp.net sql-server

我目前正在使用带有C#的ASP.NET网页为我的大学学位项目工作。我们的任务是创建学生信息系统。我试图从数据库中选择有关学生的信息,以及他们的研究顾问是谁。我可以获得研究顾问的ID,但我需要从用户表中选择两次以获得学生的姓名和研究顾问。 我正在使用SQL数据源来填充gridview中的boundfields。 下面我有2个SQL语句,我需要以某种方式组合成1。

首先选择获取研究顾问的名称(UserId在登录用户的cookie中已知):

SELECT aos.Forename as StaffForename, aos.Surname as StaffSurname, sdt.AdvisorStudiesID 
FROM [User] aos, [StudentDetails] sdt 
WHERE (sdt.StudentId=@UserId) AND (aos.UserId=sdt.AdvisorStudiesID); 

第二步选择获取学生的姓名和详细信息:

SELECT DISTINCT Forename as StudentForename, Surname as StudentSurname, TitleLong, PersonalTutor, ProfileImage 
FROM [User] u, [StudentDegree] sd, [Degree] d  
WHERE (u.UserId=@UserId) AND (d.DegreeId=sd.DegreeId) AND (sd.StudentId=@UserId);

我曾尝试用SQL数据源中的冒号分隔这些查询,但这不起作用(见下文)

<asp:SqlDataSource ID="Student" runat="server" ConnectionString="<%$ 
ConnectionStrings:QSIS_Connection %>" SelectCommand="SELECT aos.Forename 
as StaffForename, aos.Surname as StaffSurname, sdt.AdvisorStudiesID FROM 
[User] aos, [StudentDetails] sdt WHERE (sdt.StudentId=@UserId) AND 
(aos.UserId=sdt.AdvisorStudiesID); SELECT DISTINCT Forename as 
StudentForename, Surname as StudentSurname, TitleLong, PersonalTutor, 
ProfileImage FROM [User] u, [StudentDegree] sd, [Degree] d  WHERE 
(u.UserId=@UserId) AND (d.DegreeId=sd.DegreeId) AND 
(sd.StudentId=@UserId);"></asp:SqlDataSource>

非常感谢任何帮助。

3 个答案:

答案 0 :(得分:3)

你可以在同一个查询中使用两次User表,这样的事情应该这样做:

SELECT adv.Forename as StaffForename, 
       adv.Forename as StaffSurname, 
       usr.Forename as StudentForename,...etc
usr.Surname  as StudentSurname 
from   User usr, 
       User adv, 
       StudentDetails sdt, 
       StudentDegree sd, 
       Degree d 
where  ( sdt.StudentId = @UserId ) 
       AND ( adv.UserId = sdt.AdvisorStudiesID ) 
       AND ( sdt.StudentId = usr.StudentId)
       AND ( sd.StudentId = usr.StudentId ) 
       AND ( d.DegreeId = sd.DegreeId )

答案 1 :(得分:0)

You seem to have 4 tables
Please try something like this

SELECT col1.Table1, col2.Table1,col1.Table2
FROM Table1 
INNER JOIN Table2 on Table1.UserID = Table2.ID
INNER JOIN Table3 on Table2.KeyColumn1 = Table3.KeyColumn2
INNER JOIN Table4 on Table3.KeyColumn3 = Table4.KeyColumn4
WHERE <<Clause here>>

答案 2 :(得分:0)

你可以去自我加入..我不确定确切的表格结构,但根据你想要实现的目标,我认为这样的事情应该有效:

SELECT student.Forename as StudentForename, student.Surname as StudentSurname, student.TitleLong, student.ProfileImage, advisor.Forename as StaffForename, advisor.Surname as StaffSurname
FROM [StudentDetails] as sdetails
INNER JOIN [User] as student
  ON sdetails.StudentId = student.UserId
INNER JOIN [StudentDegree] as sdegree
  ON sdetails.StudentId = sdegree.StudentId
INNER JOIN [Degree] as degree
  ON sdegree.DegreeId = d.DegreeId
INNER JOIN [User] as advisor
  ON sdetails.AdvisorStudiesID = advisor.UserId
WHERE (sdetails.StudentId=@UserId)