Mysql 使用多个互连表联接显示特定表中不存在的数据

Mysql 使用多个互连表联接显示特定表中不存在的数据,mysql,sql,Mysql,Sql,我正在尝试使用var_subjectcode作为筛选器列出所有尚未注册该科目的学生。我正在使用下面的代码,但它不能正常工作。它将继续生成空字符串 DELIMITER // DROP PROCEDURE IF EXISTS proc_enrollment// CREATE PROCEDURE proc_enrollment(IN var_subjectcode VARCHAR(255)) BEGIN Select CONCAT(a.LastName, ', ', a.FirstName) as S

我正在尝试使用var_subjectcode作为筛选器列出所有尚未注册该科目的学生。我正在使用下面的代码,但它不能正常工作。它将继续生成空字符串

DELIMITER //
DROP PROCEDURE IF EXISTS proc_enrollment//
CREATE PROCEDURE proc_enrollment(IN var_subjectcode VARCHAR(255))
BEGIN
Select CONCAT(a.LastName, ', ', a.FirstName) as StudentNames , a.number
From a
Join b ON a.number = b.number
Join c ON b.number = c.number
Join d ON c.stud_id = d.stud_id
Join e ON d.subject_code = e.subject_code
Where e.subjectcode = var_subjectcode AND a.number is NULL;
END
//DELIMITER ;

如果我在整个查询中排除了
,并且a.number为空
,它将返回注册该特定var\u subjectcode的学生列表。我想要的恰恰相反。如果我在var_subjectcode中输入值,它应该返回未注册到该var_subjectcode的学生列表

var_subjectcode位于E表中


有没有更好的方法来获得我想要的结果?

如果您想要未参与给定科目代码的学生列表,这里是您需要简化的qhat:

Select CONCAT(a.LastName, ', ', a.FirstName) as StudentNames , a.number
From a
Join b ON a.number = b.number
Join c ON b.number = c.number

Join d ON c.stud_id = d.stud_id
where not exists ( select 1 from d where c.stud_id = d.stud_id and d.subject_code =var_subjectcode  )

var_subjectcode在哪个表中?请同时提供一些样本数据。什么是“工作不正常”-什么意思?请将示例数据作为问题中的文本或向小提琴提供预期结果。
和a.number为NULL
仅选择此列为NULL的行-但对于这些行
在a.number=b上加入b。number
提供空行集。谢谢!这个解决了我的问题!