嗨新来的堆栈溢出所以如果我没有正确呈现这个我很抱歉。
我使用过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秒)?
答案 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