搜索

首页  >  问答  >  正文

连接两个 SQL 表时切换一列

场景是,如果我有一张学生表,他们有 4 个班级,他们只知道房间号。还有两张表,一张是老师姓名和房间号,另一张是老师姓名以及他们所教授的科目。现在学生想知道谁是他们的数学老师,他们只想要学生姓名和数学老师姓名。

这是我正在从事的一个凭证项目的虚构场景。我已经让它在很多情况下都能工作,但速度非常慢。用于创建新列的 case 条件没有任何减慢速度,并且我使用相同的 case 条件左连接表,因为我们不知道将学生表与教师表关联到哪一列。左连接中的情况条件似乎是造成麻烦的原因,我还可以使用其他任何方法来获得相同的结果而不造成延迟吗?

P粉285587590P粉285587590280 天前411

全部回复(1)我来回复

  • P粉514458863

    P粉5144588632024-02-27 00:26:59

    我认为您遇到这么多问题的原因是您的架构不太好。特别是学生表的架构,其中每个课程/房间号都有一列。

    我首先使用子查询来纠正这个问题,例如:

    SELECT `Student Name`, 1 as Period, `1st Room#` as Room FROM students
    UNION ALL
    SELECT `Student Name`, 2 as Period, `2nd Room#` as Room FROM students
    UNION ALL 
    SELECT `Student Name`, 3 as Period, `3rd Room#` as Room FROM students
    UNION ALL 
    SELECT `Student Name`, 4 as Period, `4th Room#` as Room FROM students

    像这样的“Unpivoting”将为您提供一个漂亮干净的 Student Name |期间 | Room 架构将使解决这个问题变得更容易。

    SELECT `Student Name`, Subject.`Teacher Name`
    FROM 
        (
          SELECT `Student Name`, 1 as Period, `1st Room#` as Room FROM students
          UNION ALL
          SELECT `Student Name`, 2 as Period, `2nd Room#` as Room FROM students
          UNION ALL 
          SELECT `Student Name`, 3 as Period, `3rd Room#` as Room FROM students
          UNION ALL 
          SELECT `Student Name`, 4 as Period, `4th Room#` as Room FROM students
        ) students
        INNER JOIN teacherRoom
           ON students.Room = teacherRoom.`Room Number`
        INNER JOIN teacherSubject
           ON teacherRoom.`Teacher Name` = teacherSubject.Subject
    WHERE teacherSubject.Subject = 'Math';

    回复
    0
  • 取消回复