我正在構建一個將列出學生考試相關詳細信息的應用程序。mysql-插入0表示沒有值的記錄
CREATE TABLE IF NOT EXISTS `es_student` (
`student_id` int(11) NOT NULL,
`fname` varchar(50) NOT NULL
) ENGINE=InnoDB AUTO_INCREMENT=42 DEFAULT CHARSET=latin1;
INSERT INTO `es_student` (`student_id`, `fname`) VALUES
(1,'John');
有多個科目
有一個以上的考試。但並非所有考試都是針對某個科目進行的。 例如:對於數學,所有三門考試都進行了,但英語只進行了一門。所以,我想以零作爲那些沒有進行過的考試(針對某個科目)的標誌。
CREATE TABLE IF NOT EXISTS `es_exam` (
`exam_id` int(11) NOT NULL,
`exam` varchar(50) NOT NULL
) ENGINE=InnoDB AUTO_INCREMENT=42 DEFAULT CHARSET=latin1;
INSERT INTO `es_exam` (`exam_id`, `exam`) VALUES
(1,'Exam 1'),
(2,'Exam 2'),
(3,'Exam 3');
我這是怎麼保存的所有標記
CREATE TABLE IF NOT EXISTS `es_mark` (
`mark_id` int(11) NOT NULL,
`exam_id` int(11) NOT NULL,
`subject_id` int(11) NOT NULL,
`student_id` int(11) NOT NULL,
`mark` int(11) NOT NULL
) ENGINE=InnoDB AUTO_INCREMENT=42 DEFAULT CHARSET=latin1;
INSERT INTO `es_mark` (`mark_id`, `exam_id`,`subject_id`, `student_id`,`mark`) VALUES
(1,1,1,1,11),
(2,2,1,1,15),
(3,3,1,1,12),
(4,3,2,1,11),
(5,1,3,1,1),
(6,3,3,1,2),
(7,2,4,1,3);
但我寫的查詢不會顯示那些沒有進行這些檢查零。
SELECT es_mark.mark_id,es_mark.mark,es_exam.exam ,es_subject.subject,es_subject.subject_id,es_student.fname
FROM es_mark
LEFT JOIN es_subject ON es_mark.subject_id=es_subject.subject_id
LEFT JOIN es_student ON es_mark.student_id=es_student.student_id
LEFT JOIN es_exam ON es_exam.exam_id=es_mark.exam_id
WHERE es_mark.student_id=1
GROUP BY es_mark.mark_id
這是我得到的結果是:
mark_id mark exam subject subject_id fname
1 11 Exam 1 Math 1 John
2 15 Exam 2 Math 1 John
3 12 Exam 3 Math 1 John
4 11 Exam 3 English 2 John
5 1 Exam 1 Science 3 John
6 2 Exam 3 Science 3 John
7 3 Exam 2 Physics 4 John
這就是我想要實現:
mark_id mark exam subject subject_id fname
1 11 Exam 1 Math 1 John
2 15 Exam 2 Math 1 John
3 12 Exam 3 Math 1 John
4 11 Exam 3 English 2 John
0 0 Exam 2 English 2 John
0 0 Exam 1 English 2 John
等..
是否有可能將零作爲標記插入那些尚未進行的考試?
P.S:mark_id是無關緊要的。我知道它不能重複,因爲它是一個主鍵字段,我也將0放在所需的輸出中。
有沒有辦法讓使用SQL查詢的結果? @ kingtut007 –
即使我將它設置爲默認值0;它不會像我提到的那樣獲取結果。 @ kingtut007 –
你可以做一個更新語句,並添加0到空的。然後修改表結構以接受默認值0.或者,您可以像select select_mark_id,case時標記爲null,然後將0 END作爲標記,檢查,subject,subject_id,fname from es_mark – kingtut007