MySQL - 具有多个连接的1064问题

时间:2013-04-12 03:23:24

标签: mysql join pdo

以下是我所涉及的数据库表的简短摘要:

课程

  • CourseId
  • SchoolId
  • DisciplineId
  • 名称

学校

  • SchoolId
  • 名称

学科

  • DisciplineId
  • 名称

(表格中还有其他列,但它们与问题无关)

我正在尝试选择Courses.SchoolId =给定SchoolId的所有课程,学校所述学校的名称,与每门课程相关的所有学科的名称,以及按Disciplines.Name排序。如果这个摘要没有意义,也许我的查询将会:

 $prep = $pdo->prepare('SELECT Courses.*, Disciplines.Name as Discipline, Schools.Name as School
                        FROM Courses
                        JOIN Courses AS C ON Courses.SchoolId = :schoolId
                        AND Schools ON Schools.SchoolId = :schoolId
                        AND Disciplines ON Disciplines.DisciplineId = Courses.DisciplineId
                        ORDER BY Disciplines.Name ASC');
$prep->bindParam(':schoolId', $schoolId, PDO::PARAM_INT);

if(!$prep->execute()){
    print_r($pdo->ErrorInfo());
}

这是错误:

Warning: PDOStatement::execute(): SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'ON Schools.SchoolId = '115773' AND Disciplines ON Disciplines.Disciplin' at line 4 in /Users/foremanjordan/Web Dev/Cleerly/src/scripts/addCourse.php on line 24

我不能为我的生活找出原因。我仍然很擅长使用JOIN,所以我确信它与我的无知有关,但从我到目前为止所理解的,这应该有用吗?

另外,作为一个侧面问题,是否有人理解为什么我必须在第一个JOIN行中对别名进行别名?否则我会得到一个非唯一的错误,但我不明白为什么。

谢谢!

1 个答案:

答案 0 :(得分:2)

使用指定的关键字JOIN而不是AND

SELECT Courses.*, 
       Disciplines.Name as Discipline, 
       Schools.Name as School
FROM   Courses
       INNER JOIN Schools 
          ON Courses.SchoolId = Schools.SchoolId
       INNER JOIN Disciplines 
          ON Disciplines.DisciplineId = Courses.DisciplineId
WHERE  Courses.SchoolId = :schoolId
ORDER  BY Disciplines.Name ASC

排序时,请使用ORDER BY而不是SORT

要进一步了解联接,请访问以下链接: