【发布时间】:2015-06-11 18:45:58
【问题描述】:
我有以下查询
SELECT
student.StudentID,
student.`Name`,
CASE
WHEN attendance.date = '2015-09-07' and attendance.StudentID IS NOT NULL THEN
'Present'
ELSE
'Absent'
END AS '2015-09-07',
CASE
WHEN attendance.date = '2015-09-14' and attendance.StudentID IS NOT NULL THEN
'Present'
ELSE
'Absent'
END AS '2015-09-14'
FROM
student
LEFT JOIN attendance ON student.StudentID = attendance.StudentID`
这给了我以下结果:
我曾尝试使用GROUP BY student.StudentID,但结果不正确。它在“k1052280”的“2015-09-14”列中显示“缺席”,而不是当前。
我来了
我想得到这个结果
CREATE TABLE学生(StudentIDvarchar(8) NOT NULL,名称varchar(100) NOT NULL,电子邮件varchar(254) CHARACTER SET latin1 NOT NULL,WorkshopIDint(4) NOT NULL, PRIMARY KEY (StudentID), UNIQUE KEYStudentID(StudentID,电子邮件), KEYWorkshopID(WorkshopID), CONSTRAINTstudent_ibfk_1FOREIGN KEY (WorkshopID) REFERENCESworkshop(WorkshopID) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
CREATE TABLE出勤(AttendanceIDint(10) NOT NULL AUTO_INCREMENT,StudentIDvarchar(8) NOT NULL,日期date NOT NULL,时间time NOT NULL, PRIMARY KEY (AttendanceID), UNIQUE KEYunique_index(StudentID,日期), CONSTRAINTattendance_ibfk_1FOREIGN KEY (StudentID) REFERENCESstudent(StudentID) ) ENGINE=InnoDB AUTO_INCREMENT=194 DEFAULT CHARSET=utf8;
INSERT INTOstudentVALUES ('k1052280', 'Ali Shaikh', 'k1052280@something.com', '101'); INSERT INTOstudentVALUES ('k1052287', 'McKenzie Roth', 'Quisque@penatibus.edu', '102'); INSERT INTOstudentVALUES ('k1052288', 'Dacey Sullivan', 'sollicitudin.adipiscing.ligula@semmollisdui.com', '103'); INSERT INTOstudentVALUES ('k1052289', 'Callie Williamson', 'elementum@orciPhasellus.com', '104'); INSERT INTOstudentVALUES ('k1052290', 'Savannah Hyde', 'nec.metus.facilisis@nonummyut.co.uk', '101'); INSERT INTOstudentVALUES ('k1052291', 'Paul Tyson', 'semper.erat.in@ipsumleoelementum.net', '102'); INSERT INTOstudentVALUES ('k1052292', 'Nerea Ramos', 'gravida.sagittis.Duis@lacinia.edu', '103'); INSERT INTOstudentVALUES ('k1052293', 'Mark Mills', 'pellentesque.massa@blanditviverra.co.uk', '104'); INSERT INTOstudentVALUES ('k1052293', 'Mark Mills', 'pellentesque.massa@blanditviverra.co.uk', '104'); INSERT INTOstudent@76
INSERT INTO出勤VALUES ('168', 'k1052280', '2015-09-07', '00:00:00'); INSERT INTO出勤VALUES ('169', 'k1052287', '2015-09-09', '00:00:00'); INSERT INTO出勤VALUES ('170', 'k1052288', '2015-09-11', '00:00:00'); INSERT INTO出勤VALUES ('171', 'k1052289', '2015-09-11', '00:00:00'); INSERT INTO出勤VALUES ('172', 'k1052290', '2015-09-14', '00:00:00'); INSERT INTO出勤VALUES ('173', 'k1052291', '2015-09-16', '00:00:00'); INSERT INTO出勤VALUES ('174', 'k1052292', '2015-09-18', '00:00:00'); INSERT INTO出勤VALUES ('175', 'k1052293', '2015-09-18', '00:00:00'); INSERT INTO出勤VALUES ('176', 'k1052294', '2015-09-21', '00:00:00'); INSERT INTO出勤VALUES ('177', 'k1052295', '2015-09-23', '00:00:00'); INSERT INTO出勤VALUES ('178', 'k1052296', '2015-09-25', '00:00:00'); INSERT INTO出勤VALUES ('179', 'k1052297', '2015-09-25', '00:00:00'); INSERT INTOattendanceVALUES ('183', 'k1052288', '2015-09-14', '00:00:00'); INSERT INTOattendanceVALUES ('187', 'k1052290', '2015-09-07', '00:00:00'); INSERT INTOattendanceVALUES ('188', 'k1052280', '2015-09-21', '10:30:00'); INSERT INTOattendanceVALUES ('193', 'k1052280', '2015-04-05', '00:00:00');
【问题讨论】:
-
你想看到什么结果?
-
@TimBiegeleisen 我想看看他们是否在场,如果他们在每个日期都缺席,我想看缺席
-
你还没有给我们一个规则来告诉我们如何在
k1052280的两行之间进行选择。请解释你的逻辑。 -
学生“Savannah”如何同时“缺席”和“在场”?你的逻辑有问题。
-
表格错了,一个人不应该有多个条目,我认为您需要更改初始查询,这样每个人只会返回一行
标签: php mysql mysqli duplicates