首页 > 数据库 > mysql教程 > 为什么 MySQL 不支持 EXCEPT,如何才能达到相同的结果?

为什么 MySQL 不支持 EXCEPT,如何才能达到相同的结果?

Mary-Kate Olsen
发布: 2025-01-03 19:06:09
原创
886 人浏览过

Why Doesn't MySQL Support EXCEPT and How Can I Achieve the Same Result?

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 语法。

替代解决方案:

要达到所需的结果,有两种替代方法:

  1. 不在子查询:
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”表中。

  1. LEFT JOIN 与 NULL检查:
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中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板