mysql - 在连接的 SQL 语句中选择多个具有相同名称的事物
问题描述
我目前有一个 SQL 语句来填充一个表,其中包含学生姓名和他们在给定学期参加的运动的名称。运动的名称存储在带有 Sport_ID 的运动表中。然后,Sport_ID 对应于选择表中的 Choice_ID。然后将此 Choice_ID 放入表 Student_Choices 中标记为 T1_Choice、T2_Choice 和 T3_Choice 的每个术语的列中。如何从我的 SQL 语句中获取 T2_Choice 和 T3_Choice?谢谢您的帮助。
$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>
';
}
解决方案
解决方案是您可以多次调用 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
");
推荐阅读
- json - 使用 Codable 解析任何类型的 json
- java - 检查是否列表
包含给定的 int[] - javascript - 直接使用 this.props 或 this.state 与设置 const
- c# - 有没有办法自动化不受不同保护模式设置影响的 Internet Explorer?
- c++ - 无法在 Visual Studio 2019 中使用诊断工具
- if-statement - 使用 SWITCH 与 SPARKLINES 为主条着色不同的颜色
- python - 尝试使用循环从网站导入数据时出错
- javascript - 如何更好地格式化从 api 提取到 ant 设计表的数据
- javascript - 全局对象在自定义模块中不可用,即使在传入和请求时也是如此
- c - 在 C 语言中超越风格?