2010-08-06 103 views
1

到目前爲止,我可以列出所有的學生論文和分級學生論文,並想知道我怎麼會能夠顯示所有未分級的文章?我還有什麼要添加到我的MySQL代碼?MySQL查詢問題

感謝您的幫助!

這是我到目前爲止的代碼。

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 

這是我的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) 
); 
+0

如若最後一個加入不是「ON essays_grades.grade_id = essays_grades.id」? – Frank 2010-08-06 21:34:34

回答

1
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 
INNER JOIN grades ON essays_grades.grade_id = grades.id 
WHERE LETTER_GRADE IS NULL 
ORDER BY students_essays.id DESC; 

我用INNER JOIN,就像你一樣。需要注意的是內部聯接將隱藏行的左側表中,如果右表中沒有找到匹配條目。如果您還想包含這些,請使用左連接。

我認爲letter_grade爲空,如果作文是不分級的。如果你的數據庫不會有essays_grades行,如果文章沒有分級,查詢會更簡單:

SELECT students.*, students_essays.* 
FROM students 
INNER JOIN students_essays ON students.student_id = students_essays.student_id 
LEFT JOIN essays_grades ON students_essays.id = essays_grades.students_essays_id 
WHERE essays_grades.grade_id IS NULL 
ORDER BY students_essays.id DESC; 
+0

如果沒有行在'grades'或'essays_grades'下輸入未評分的文章怎麼辦? – labs 2010-08-06 21:44:13

+0

這很簡單謝謝:) – labs 2010-08-06 21:51:49

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

這沒有奏效,它也顯示了評分文章:( – labs 2010-08-06 21:34:05

0

是不分級的一個letter_grade,E。 G。 'UG'?

在這種情況下,ORDER BY前加

WHERE letter_grade = 'UG'