我目前正在使用带有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>
非常感谢任何帮助。
答案 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)