这是表结构
CREATE TABLE `student_classlists` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`SessionCode` int(5) DEFAULT NULL,
`CourseCode` varchar(10) DEFAULT NULL,
`SectionCode` varchar(1) DEFAULT NULL,
`LastName` varchar(255) DEFAULT NULL,
`FirstName` varchar(255) DEFAULT NULL,
`StudentId` int(10) unsigned DEFAULT NULL,
`FinalGradeSIS` int(10) DEFAULT NULL,
`Status` varchar(10) DEFAULT NULL,
`Faculty` varchar(255) DEFAULT '',
`Email` varchar(255) DEFAULT NULL,
`ClassListDate` date DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=576 DEFAULT CHARSET=utf8;
Status
列主要由NULL
行组成,只有少数例外。我试图忽略那些非空的记录。以下查询不起作用:
SELECT StudentId FROM student_classlists WHERE `Status` NOT IN ('Drop') GROUP BY StudentId
由于某种原因,它会产生意外和空的结果。但是一个非常相似的查询除了删除NOT
之外唯一的例外就会产生预期的结果
SELECT StudentId FROM student_classlists WHERE `Status` IN ('Drop') GROUP BY StudentId
这里发生了什么?
答案 0 :(得分:1)
NULL
状态的行不会出现在输出中,因为它们既不在IN
列表的内部也不在COALESCE
列表之外。要获取这些行,请添加SELECT StudentId
FROM student_classlists
WHERE COALESCE(`Status` NOT IN ('Drop'), 1)
GROUP BY StudentId
,如下所示:
NULL
这实际上表示必须包含Status
列中{{1}}值的记录。
答案 1 :(得分:0)
如果您只想要NULL
Status
条记录,则可以执行以下操作:
SELECT StudentId FROM student_classlists WHERE Status IS NULL