2010-08-06 203 views
1

到目前为止,我可以列出所有学生的散文,但我希望能够只显示评分的学生散文,并想知道我将如何能够做到这一点?我还有什么要添加到我的MySQL代码?MySQL查询问题

感谢您的帮助!

这是我到目前为止与我的MySQL代码。

SELECT students.*, students_essays.* 
FROM students 
INNER JOIN students_essays ON students.student_id = students_essays.student_id 
ORDER BY students_essays.id DESC 

这是我的MySQL表。

CREATE TABLE students_essays (
id INT UNSIGNED NOT NULL AUTO_INCREMENT, 
student_id INT UNSIGNED NOT NULL, 
content TEXT NOT NULL, 
PRIMARY KEY (id) 
); 


CREATE TABLE students (
student_id INT UNSIGNED NOT NULL AUTO_INCREMENT, 
student_first_name VARCHAR(255) DEFAULT NULL, 
student_last_name VARCHAR(255) DEFAULT NULL, 
pass CHAR(40) NOT NULL, 
PRIMARY KEY (student_id) 
); 


CREATE TABLE essays_grades (
id INT UNSIGNED NOT NULL AUTO_INCREMENT, 
grade_id INT UNSIGNED NOT NULL, 
students_essays_id INT UNSIGNED NOT NULL, 
student_id INT UNSIGNED NOT NULL, 
PRIMARY KEY (id) 
); 

CREATE TABLE grades (
id INT UNSIGNED NOT NULL AUTO_INCREMENT, 
letter_grade VARCHAR(2) DEFAULT NULL, 
grade_points FLOAT UNSIGNED NOT NULL DEFAULT 0, 
PRIMARY KEY (id) 
); 

回答

1

只是内部加入到essays_grades表(如果你想要成绩的话,就是成绩表)。

SELECT students.*, students_essays.* 
FROM students 
INNER JOIN students_essays ON students.student_id = students_essays.student_id 
INNER JOIN essays_grades ON students_essays.id = essays_grades.students_essays_id 
ORDER BY students_essays.id DESC 

这里有几个小技巧......你可以别名表名(在FROM子句中的表名之后提供的别名),并停止其全名指的是他​​们,你只能说JOIN和它暗示着是一个内部联接。

SELECT st.*, es.* 
FROM students st 
JOIN students_essays es ON st.student_id = es.student_id 
JOIN essays_grades gr ON es.id = gr.students_essays_id 
ORDER BY es.id DESC 
0

只需加入论文表的成绩表并检查现有记录。

SELECT students.*, students_essays.* 
FROM students 
INNER JOIN students_essays ON students.student_id = students_essays.student_id 
INNER JOIN essays_grades ON students_essays.id = essays_grades.students_essays_id 
ORDER BY students_essays.id DESC 
+0

该OP只希望看到评分文章,因此使用INNER JOIN是安全的 - LEFT JOIN/IS NULL将显示没有任何等级的文章。 – 2010-08-06 17:38:28

+0

很好,谢谢。 – 2010-08-06 18:18:46