首页 > 解决方案 > 在连接的 SQL 语句中选择多个具有相同名称的事物

问题描述

我目前有一个 SQL 语句来填充一个表,其中包含学生姓名和他们在给定学期参加的运动的名称。运动的名称存储在带有 Sport_ID 的运动表中。然后,Sport_ID 对应于选择表中的 Choice_ID。然后将此 Choice_ID 放入表 Student_Choices 中标记为 T1_Choice、T2_Choice 和 T3_Choice 的每个术语的列中。如何从我的 SQL 语句中获取 T2_Choice 和 T3_Choice?谢谢您的帮助。

DB小提琴链接

$stmt = $conn->prepare(
              "SELECT st.Name AS student, s.Name AS sport
              From Sports AS s INNER JOIN Choices AS c
              ON s.Sport_ID = c.Sport_ID INNER JOIN Student_Choices AS sc
              ON sc.T1_Choice = c.Choice_ID INNER JOIN Students AS st
              ON st.Username = sc.Username
              ");
            $stmt->execute();
            while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
              echo '<tr>
              <td>'.$row['student'].'</td>
              <td>'.$row['sport'].'</td>
              <td>'.$row['sport'].'</td>
              <td>'.$row['sport'].'</td>
              </tr>
              ';
            }

标签: mysqljoinpdo

解决方案


解决方案是您可以多次调用 JOIN 到一个表。因为 Choices 中的 Choice_ID 需要链接到 Student_Choices 表中的不同术语选择。因此,您需要使用不同的别名多次加入 Choices 表,并且对于每个实例,您需要使用不同的别名加入 Sports 表。我的解决方案是:

("SELECT st.Name AS student, T1.Name AS T1, T2.Name AS T2, T3.Name AS T3
              From Students AS st INNER JOIN Student_Choices AS sc
              ON st.Username = sc.Username
              INNER JOIN Choices AS c1
              ON sc.T1_Choice = c1.Choice_ID
              INNER JOIN Sports AS T1
              ON c1.Sport_ID = T1.Sport_ID
              INNER JOIN Choices AS c2
              ON sc.T2_Choice = c2.Choice_ID
              INNER JOIN Sports AS T2
              ON c2.Sport_ID = T2.Sport_ID
              INNER JOIN Choices AS c3
              ON sc.T3_Choice = c3.Choice_ID
              INNER JOIN Sports AS T3
              ON c3.Sport_ID = T3.Sport_ID
              ");

推荐阅读