Mysql 使用内部join SQL语句时未定义索引

Mysql 使用内部join SQL语句时未定义索引,mysql,sql,join,pdo,Mysql,Sql,Join,Pdo,您好,我正在尝试编写SQL语句来填充表,但我一直收到一个错误: 未定义索引:st.Name,未定义索引:s.Name 我不明白为什么会这样,因为我在SQL语句中选择了它们。我对SQL不是很在行,因此希望能得到帮助 <?php ini_set("display_errors", 1); try{ $stmt = $conn->prepare( "SELECT st.Name, s.Name From Sports AS s INNER JOIN

您好,我正在尝试编写SQL语句来填充表,但我一直收到一个错误:

未定义索引:st.Name,未定义索引:s.Name

我不明白为什么会这样,因为我在SQL语句中选择了它们。我对SQL不是很在行,因此希望能得到帮助

<?php
ini_set("display_errors", 1);
try{
    $stmt = $conn->prepare(
        "SELECT st.Name, s.Name
        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['st.Name'].'</td>
                <td>'.$row['s.Name'].'</td>
         </tr>
        ';
    }
}
catch(PDOException $e)
{
    echo "error".$e->getMessage();
}
?>

存在多个问题。首先,您的假设是错误的,即您将能够使用
访问这些列值。相反,它们只能使用列名或定义的别名进行访问

现在,在本例中,您有两个同名的列。因此,您应该为它们定义不同的别名,以避免模棱两可的行为。我已经定义了
student\u name
sport\u name

定义别名后,现在可以仅使用别名访问这些列值

        $stmt = $conn->prepare(
          "SELECT st.Name AS student_name, 
                  s.Name AS sport_name 
          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_name'].'</td>
              <td>'.$row['sport_name'].'</td>
            </tr>
          ';
        }
$stmt=$conn->prepare(
“选择st.Name作为学生姓名,
s、 名称为运动名称
从体育作为s的内部连接选择作为c
关于s.Sport\u ID=c.Sport\u ID内部连接学生选择作为sc
关于sc.T1_Choice=c.Choice_ID内部加入学生作为st
ON st.Username=sc.Username
");
$stmt->execute();
而($row=$stmt->fetch(PDO::fetch\U ASSOC)){
回声'
“.$row['student_name']”
“.$row['sport_name']”
';
}

或者更好的称呼他们
学生
运动
;)谢谢你,我还有两个运动项目T2和T3。如何实现这些,因为它们也将作为s返回_name@TobyDixonSmith顺便说一句,你可以为另外两项运动使用不同的别名;它们没有使用相同别名的限制