2010-08-06 150 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