0

以下是我所涉及的数据库表的简要总结:

培训班

  • 课程编号
  • 学校编号
  • 学科 ID
  • 姓名

学校

  • 学校编号
  • 姓名

学科

  • 学科 ID
  • 姓名

(表中还有其他列,但它们与问题并不真正相关)

我正在尝试选择 Courses.SchoolId = 给定 SchoolId 的所有课程,从 Schools 中选择所述学校的名称,与每门课程相关的所有学科的名称,并按 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 行中为 Courses 起别名吗?否则我会收到一个非唯一错误,但我不明白为什么。

谢谢!

4

1 回答 1

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 BYnotSORT

要进一步了解有关联接的更多信息,请访问以下链接:

于 2013-04-12T03:27:13.897 回答