JOIN命令问题

时间:2013-03-15 14:27:59

标签: sql database join

嗨新来的堆栈溢出所以如果我没有正确呈现这个我很抱歉。

我使用过Google,W3schools并在SQL上阅读FQA。

我在WAMP2.0中使用SQL命令行运行SQL。我目前正在做一个项目,目的是创建一个最小的大学数据库。与学生,成绩,课程,模块等

其中一项任务是列出所有学生,有模块和相应的成绩。为此,我尝试使用JOIN命令从Students表中选择所有名称,并在记录表中显示所有相应的模块+成绩。

+------------+-------+------------+-----------------+
| Student_id | Name  | DOB        | Address         |
+------------+-------+------------+-----------------+
|    4665236 | Paddy | 1985-09-18 | 123 Fake Street |
|    5665236 | Paul  | 1984-06-12 | Good manlane    |
|    6665236 | John  | 1984-03-09 | Docotor town    |
|    7665236 | Aidan | 1983-07-09 | Banker worlds   |
|    8665236 | Joe   | 1983-07-09 | 24 hitherwood   |
+------------+-------+------------+-----------------+

+------------+--------+------+-------+
| Student_id | Mod_id | GPA  | Grade |
+------------+--------+------+-------+
|    4655236 |   2222 | 3.84 | A-    |
|    5655236 |  11111 | 3.44 | B+    |
|    6655236 |  33333 | 3.24 | B     |
|    7655236 |  44444 | 2.45 | C-    |
|    8655236 |  44444 | 2.45 | C-    |
+------------+--------+------+-------+

学生表中的PRIMARY KEY是Student_id INT 11

记录的PRIMARY KEY是(Student_id,Mod_id)

单个SELECT FROM,语句在两​​个表上都能正常工作。

使用

时出现问题
SELECT students.Name, records.Grade
FROM students
INNER JOIN records
ON students.Student_id=Student_id
ORDER BY students.Name

我收到以下错误

  

ERROR 1052(23000):on子句中的'Student_id'列不明确

感谢我试过的快速反应

  

选择students.Name,records.Grade   来自学生   INNER JOIN记录   ON students.Student_id = records.Student_id   ORDER BY students.Name;

得到----空集(0.00秒)?

3 个答案:

答案 0 :(得分:1)

您必须使用别名Student_Id对该列records.studentId进行限定,以使其在ON子句中不明确,或者:

SELECT s.Name, r.Grade
FROM students AS s
INNER JOIN records AS r ON s.Student_id= r.Student_id
ORDER BY s.Name

答案 1 :(得分:1)

您需要提供列Student_id的表名以避免歧义,因为它们都存在于两个表中。

SELECT students.Name, records.Grade
FROM   students
       INNER JOIN records
          ON students.Student_id = records.Student_id -- << THIS
ORDER  BY students.Name

答案 2 :(得分:0)

您的列名被标记为不明确的原因是因为您有两个不同的表,每个表都有Student_id字段。您可以将表连接到自身,因此即使您在字段的第一个实例上有标识符,您也需要一个。

请尝试以下代码:

SELECT students.Name, records.Grade
FROM students
INNER JOIN records
ON students.Student_id=records.Student_id
ORDER BY students.Name

如果通过使用以下方法帮助您的代码看起来更清晰,您也可以对表进行别名:

SELECT s.Name, r.Grade
FROM students s
INNER JOIN records r
ON s.Student_id=r.Student_id
ORDER BY s.Name

但是,这仅适用于两个表中学生ID匹配的情况。在您提供的示例数据中,没有匹配的记录。 4665236!= 4655236