SQL 相关性 and/or 别名

SQL Correlation and/or alias

我在高中教网页设计,我正在为我的学生设计一个新的 activity。我有 2 个表,见下图,我正在尝试输出图像后面的句子。这是我到目前为止的代码...

select sealTime.id,
       sealTime.student,
       sealTime.reqTeacher,
       sealTime.asignTeacher,
       sahsUsers.status,
       sahsUsers.title,
       sahsusers.firstname,
       sahsusers.lastname
from sealTime
INNER JOIN sahsUsers ON sealTime.studentId = sahsUsers.id
WHERE sealTime.id = '345'

当前代码只输出学生姓名,

<cfoutput query="names"> 
     <p>#firstname# #lastname# has been asked by #title# #lastname# 
     to be excused to #title# #lastname#'s room today during flex period.    
</cfoutput>

这就是我得到的输出

David Johnson has been asked by 36 to be excused to 35 room today during flex period.

试试下面的脚本-

select sahsusers.firstname + ' ' + 
   sahsusers.lastname +
   ' has been asked by ' +
   Cast(sealTime.reqTeacher as varchar) +
   ' to be excused to '+
   Cast(sealTime.asignTeacher as varchar) +
   ' room today during flex period.'

From sealTime
INNER JOIN sahsUsers  ON sealTime.studentId = sahsUsers.id
WHERE sealTime.id = '345'

为此,如果我没有考虑太多,我可能只是循环 sealTime 并在该循环中,从 sahsUsers 为每个名称执行 selects。如果规则规定它必须是单个 SQL 语句,或者循环和 select 方法由于数据量太大而太慢,我可能会这样做:

SELECT sealTime.id,
       sealTime.student,
       sealTime.reqTeacher,
       sealTime.asignTeacher,
       student.status studentStatus,
       student.title studentTitle,
       student.firstname studentFirstname,
       student.lastname studentLastname,
       teacher1.status teacher1Status,
       teacher1.title teacher1Title,
       teacher1.firstname teacher1Firstname,
       teacher1.lastname teacher1Lastname,
       teacher2.status teacher2Status,
       teacher2.title teacher2Title,
       teacher2.firstname teacher2Firstname,
       teacher2.lastname teacher2Lastname
FROM sealTime
INNER JOIN sahsUsers student ON sealTime.studentId = student.id
INNER JOIN sahsUsers teacher1 ON sealTime.reqTeacher = teacher1.id
INNER JOIN sahsUsers teacher2 ON sealTime.asignTeacher = teacher2.id
WHERE sealTime.id = '345'

然后假设您将查询命名为 "query",并假设 teacher1 (reqTeacher) 是发出请求的人(如果不是,只需交换 teacher1 和 teacher2),您可以这样做:

#query.studentFirstname# #query.studentLastname# has been asked by #query.teacher1Title# #query.teacher1Lastname# to be excused to #query.teacher2Title# #query.teacher2Lastnaame#'s room today during flex period.

这还假设您已进行检查以确保 sealTime table 中 reqTeacher 和 asignTeacher 列中的 ID 始终是教师或管理员,而不是学生,并且学生列中的 ID 始终是学生,而不是管理员或教师。如果它不正确,您可以构建检查并检查错误,尽管使用循环和查询方法比使用单sql-查询方法更容易。