MySQL 查询中的 EXCEPT 语法错误
MySQL 用户在尝试在查询中使用 EXCEPT 运算符时可能会遇到语法错误。当尝试从主表中排除与子查询中的条件匹配的行时,通常会发生此错误。
考虑以下示例:
SELECT s.sno FROM students s EXCEPT SELECT t.sno FROM take t WHERE t.cno = 'CS112';
此查询尝试从以下位置检索所有学生 ID:课程“CS112”的“参加”表中不存在的“学生”表。但是,MySQL 不支持 EXCEPT 语法。
替代解决方案:
要达到所需的结果,有两种替代方法:
SELECT s.sno FROM students s WHERE s.sno NOT IN ( SELECT t.sno FROM take t WHERE t.cno = 'CS112' );
此查询显式检查“students”表中的学生 ID 是否不存在于课程“CS112”的“take”表中。
SELECT s.sno FROM students s LEFT JOIN take t ON s.sno = t.sno WHERE IFNULL(t.cno, '') != 'CS112';
此查询使用 LEFT JOIN 来匹配“students”和“take”表之间的学生 ID。然后,它使用 IFNULL 函数检查“take”表中的“cno”字段是否为空,表明学生未注册“CS112”。
示例用法:
使用问题中的模拟数据,带有 NULL 检查的 LEFT JOIN 产生以下结果结果:
SELECT s.sno FROM temp_students s LEFT JOIN temp_take t ON s.sno = t.sno WHERE IFNULL(t.cno, '') != 'CS112';
输出:
5 6 7 8 9 10
因此,用户可以使用 NOT IN 子查询或带有 NULL 检查策略的 LEFT JOIN 来排除 MySQL 中的行,而不是使用 EXCEPT 语法查询。
以上是为什么 MySQL 不支持 EXCEPT,如何才能达到相同的结果?的详细内容。更多信息请关注PHP中文网其他相关文章!