MySQL“NOT IN”查询3个表

2023-11-21

我有 3 个表格课程、成绩和评估。我想比较两个表的等级和评价。如果表等级中的数据在表评价中不存在,则该数据会出现(输出)

table and output

"   select Grade.ID_Courses,Course.ID_Courses,Grade.NAME, 
    Course.NAME, Grade.ID_Courses,
    Evaluation.NAME,
    Evaluation.Year,    
    Grade.Year
    from Grade, Course, Evaluation
    WHERE 
    Grade.ID_Courses=Course.ID_Courses AND 
    Grade.NAME=JOHN and 
    Grade.Year=1 and 
    Evaluation.NAME=GRADE.NAME and
    Grade.ID_Courses NOT IN (SELECT ID_Courses FROM Evaluation where NAME=JOHN and Year=1 )
    GROUP BY Grade.ID_Courses"

问题是当名字 john 不在表评估中时,就没有输出。


Avoid NOT IN像瘟疫一样如果

SELECT ID_Courses FROM Evaluation where `NAME`='JOHN' and Year=1

可能包含 NULL。相反,使用 NOT EXISTS 或左连接

使用显式连接,而不是使用 1980 年代风格的连接WHERE clause

为了说明 NOT IN 的痛苦:

SQL NOT IN() 危险

create table mStatus
(   id int auto_increment primary key,
    status varchar(10) not null
);
insert mStatus (status) values ('single'),('married'),('divorced'),('widow');

create table people
(   id int auto_increment primary key,
    fullName varchar(100) not null,
    status varchar(10)  null
);

Chunk1:

truncate table people;
insert people (fullName,`status`) values ('John Henry','single');
select * from mstatus where `status` not in (select status from people);

** 3 行,如预期 **

Chunk2:

truncate table people;
insert people (fullName,`status`) values ('John Henry','single'),('Kim Billings',null);
select * from mstatus where status not in (select status from people);

没有行吧?

显然这是“不正确的”。它源于 SQL 对三值逻辑的使用, 由 NULL 的存在驱动,NULL 是一个表示缺失(或未知)信息的非值。 对于 NOT IN, Chunk2,它的翻译如下:

status NOT IN ('married', 'divorced', 'widowed', NULL)

这相当于:

NOT(status='single' OR status='married' OR status='widowed' OR status=NULL)

表达式“status=NULL”的计算结果为 UNKNOWN,并且根据三值逻辑规则, NOT UNKNOWN 也评估为 UNKNOWN。结果,所有行都被过滤掉,并且查询返回一个空集。

可能的解决方案包括:

select s.status
from mstatus s
left join people p
on p.status=s.status
where p.status is null

or use not exists

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MySQL“NOT IN”查询3个表 的相关文章

  • 将 PHP mcrypt 与 Rijndael/AES 结合使用

    我正在尝试使用 php 中的 mcrypt 和密码 Rijndael 加密一些文本消息 但我不确定 MCRYPT MODE modename 根据 PHP 手册 这些可用 ecb cbc cfb ofb nofb 或 stream 但我读到
  • Facebook Graph API v3.1 开发人员访问令牌权限限制

    如您所知 Facebook 将其 API 升级到了 V3 1 现在正在慢慢地淘汰旧的 API 和应用程序 因此我们必须迁移到新的 API 他们做出了一些艰难的决定 这对垃圾邮件网站来说是好事 但对开发人员来说也很难 提醒 Graph API
  • Postgres、更新和锁定顺序

    我正在研究 Postgres 9 2 有 2 个更新 每个更新都有自己的事务 一个看起来像 UPDATE foo SET a 1 WHERE b IN 1 2 3 4 另一个也类似 UPDATE foo SET a 2 WHERE b IN
  • Quartz.NET 设置 MisfireInstruction

    我正在使用 Quartz NET 在 C 中工作 并且在 CronTrigger 上设置失火指令时遇到问题 我正在运行安装了 Quartz DB 的 SQL 后端 我有以下代码 可以很好地创建作业和运行调度程序 IScheduler sch
  • PHP/MySQL:如何在网站中创建评论部分[关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我不会问 如何使用 PHP MySQ
  • 如何在无法重启的服务器(Apache)上使用gettext?

    我在服务器故障上问了这个问题 https serverfault com questions 104224 how do you use gettext on server apache you cant restart但我没有得到任何回应
  • Laravel Group By 和 Order By 不起作用

    我尝试制作一个Laravel 5 8项目 项目中的数据是这样的 id purch name prcvalue 1 10234 Nabila 100 2 10234 Nadeera 450 3 10234 Nabila 540 4 10234
  • 消息 102,级别 15,状态 1,第 1 行“ ”附近的语法不正确

    我试图从临时表中查询 但不断收到此消息 Msg 102 Level 15 State 1 Line 1 Incorrect syntax near 有人能告诉我问题是什么吗 是因为要转换吗 查询是 select compid 2 conve
  • DOMPDF - 未找到“字体”类

    我正在尝试通过命令行添加字体 每次我尝试都会收到以下错误 Fatal error Class Font not found in home scripts public html MarketingPalv2 load font php o
  • SQL Server 转换选择一列并将其转换为字符串

    是否可以编写一条从表中选择列并将结果转换为字符串的语句 理想情况下 我希望有逗号分隔的值 例如 假设 SELECT 语句看起来像这样 SELECT column FROM table WHERE column lt 10 结果是一列包含值的
  • 将多行合并为一行并根据行数附加列

    我正在尝试将同一个表的多行合并为一个 我有一个像这样的示例表 Col1 Col2 Col3 Col4 Col5 Col6 1 BH1 CB 12 CC CC Conveyor Mal 1 BH1 CB 104 ZC ZC Full Emp
  • Yii 查询时对相关模型的限制

    我遇到了极限问题 我正在使用的代码如下 model PostCategory model record model gt with array posts gt array order gt posts createTime DESC li
  • Oracle:如果表存在

    我正在为 Oracle 数据库编写一些迁移脚本 并希望 Oracle 有类似于 MySQL 的东西IF EXISTS构造 具体来说 每当我想删除 MySQL 中的表时 我都会执行类似的操作 DROP TABLE IF EXISTS tabl
  • 如何使用 PHP 从 MySQL 检索特定值?

    好吧 我已经厌倦了 过去一周我花了大部分空闲时间试图解决这个问题 我知道 SQL 中的查询已更改 但我无法弄清楚 我能找到的所有其他帖子似乎都已经过时了 如果有人能帮助我 我将非常感激 我想做的就是使用手动输入数据库的唯一 密码 来检索行的
  • 如何使用 PHP 获取列中的所有值?

    我一直在到处寻找这个问题 但仍然找不到解决方案 如何从 mySQL 列中获取所有值并将它们存储在数组中 例如 表名称 客户 列名称 ID 名称 行数 5 我想获取此表中所有 5 个名称的数组 我该如何去做呢 我正在使用 PHP 我试图 SE
  • 累计非重复计数

    我正在查询每天获取 uid 的累计不同计数 示例 假设有 2 个 uid 100 200 出现在日期 2016 11 01 并且它们也在第二天出现 新的 uid 300 100 200 300 出现在 2016 11 02 此时我希望商店累
  • 如何解决 MySQL innodb 在 TRUNCATE TABLE 上“等待表元数据锁”?

    在 GitLab CI 服务器中运行包含数百个应用程序单元测试的测试套件 运行 10 次测试后 不知怎的 它总是卡在等待 TRUNCATE TABLE 上的表元数据锁上 这是一个拆卸步骤 我知道SHOW ENGINE INNODB STAT
  • 如何在动态查询中将行值连接到列名

    我正在开发一个允许配置问题和答案的应用程序 目前最多可以有 20 个答案 但也可能更少 我的结构如下 问题 ID FormId QuestionText AnswerField 1 1 Name Answer01 2 1 Address A
  • 无法与站点通信以检查致命错误

    无法与站点通信以检查致命错误 因此 PHP 更改已恢复 您需要通过其他方式上传 PHP 文件更改 例如使用 SFTP 有什么解决办法 我正在 WordPress 中编辑头文件 遇到这个问题 尝试这个 我有同样的问题并决定调查一下 更改 wp
  • 如何移动 Zend_Layout 的“视图”

    通常它会是这样的结构 application modules somemodule views scripts index index phtml 我如何将其移动到 application templates somemodule temp

随机推荐

  • TableView 页脚随表格滚动

    我刚刚在 tableView 的页脚中实现了一个 加载更多 按钮 但页脚始终随表格滚动 我的tableView的样式是UITableViewStylePlain 请你告诉我哪里出了问题 UIView tableView UITableVie
  • 谷歌云消息安全

    公司创建一个项目并接收发件人 ID 公司创建一个应用程序 烘焙其发件人 ID 并将该应用程序放置在商店中 攻击者对应用程序进行逆向工程 并提取发送者 ID 和用于接收 GCM 注册 ID 的服务器接口 攻击者创建自己的应用程序 嵌入公司的发
  • 从本地范围返回值?

    在我们的代码库中遇到这样的代码 这让我很担心 int foo int a Forward declaration int baz int result int a dosomestuff foo a 0 1 return result 这段
  • 如何设置WCF测试客户端在每次服务运行时运行

    我有一个 WCF 项目 当我运行它时 有时会启动 WCF 测试 有时则不会 如何设置 WCF 测试客户端始终显示 MLF 答案中的链接确实包含很好的信息 绝对值得一读 然而 我花了一段时间才找到我正在寻找的具体答案 大约在页面的中间 如果在
  • 如何将 create-react-app 与 Spring Boot 一起使用?

    我正在尝试将 ReactJS 应用程序与使用 Spring Boot 构建的 API 一起提供 我已经运行了脚本create react app在 public 上 如下面的结构所示 但是 当我尝试从 ReactJS 访问它时 所有相对路径
  • 在单行中打印不带括号的列表

    我有一个Python列表 例如 names Sam Peter James Julian Ann 我想在一行中打印数组 而不使用普通的 names Sam Peter James Julian Ann print names 输出如下 Sa
  • 在反应中插入光标

    我需要在插入符 当前光标位置 处插入文本React 控制文本区域 如自动完成 对于普通文本区域 我使用了以下代码 insertAtCursor function myField myValue IE if document selectio
  • 如何将 AKSequencer 连接到 AKCallbackInstrument?

    我想读取 MIDI 文件并在触发音符事件时显示内容 我发现了这个 stackoverflow 问题 其中第二个答案建议使用 AudioKit 如何为我的音频应用程序获得可靠的计时 更准确地说 建议使用 AKSequencer 吸收应用程序中
  • ios 11 导航栏重叠状态栏

    在 ios 11 中 导航栏与状态栏重叠 如果有人遇到同样的问题 请提供帮助 不确定这是否是同样的问题 但我们在升级到 iOS 11 时也遇到了这个问题 See ios 11 自定义导航栏位于状态栏下方 我们手动将导航栏高度设置为 64 并
  • Spring MVC JavaConfig webapp 中的“错误页面”配置? (没有 web.xml)

    我将如何使用 Java 配置向 Spring MVC Web 应用程序添加 错误页面 类型配置 没有 web xml
  • Apache Flink - 如果 x 分钟内没有收到数据,则发送事件

    如何使用 Flink 的 DataStream API 实现一个运算符 以便在一段时间内没有从流中接收到数据时发送事件 这样的运算符可以使用ProcessFunction DataStream
  • 第一个实体框架 6 nonquery 的六秒预热时间

    从我的集成测试来看 Act Stopwatch w new Stopwatch w Start userService Create userDTO w Stop public void Create UserDTO userDTO var
  • 如何让我的 Chrome 扩展程序只注入一次脚本?

    我在用着程序化注入仅在单击浏览器操作时将我的扩展程序的代码注入页面 这就是我的扩展中的内容活动页面 根据中的示例文档 chrome browserAction onClicked addListener function callback
  • JQuery ajax 调用 httpget webmethod (c#) 不起作用

    我试图让 ajax 访问后面代码中的 webmethod 问题是我不断从 jQuery 收到错误 parserror onfail method 如果我将 GET 更改为 POST 一切正常 请参阅下面我的代码 阿贾克斯调用
  • 有reactive-banana-gtk吗?

    我找到了reactive banana wax 想知道是否还有一个类似的gtk包 因为reactive香蕉应该支持gtk 根据http www haskell org haskellwiki Reactive banana The reac
  • 用于诊断 .NET 中内存泄漏的工具(ASP.NET 应用程序)[关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 目前不接受答案 我们需要一个工具来轻松检测 ASP NET 应用程序中的内存泄漏 我们有一个应用程序 它消耗大量内存 Thanks Using WinDbg不像使用
  • Thread.CurrentPrincipal.Identity vs HttpContext.User.Identity [重复]

    这个问题在这里已经有答案了 可能的重复 http context user 和 thread currentprincipal 之间的区别以及何时使用它们 这两者在 ASP NET 应用程序中有何区别 我知道HttpContext User
  • 如何将 CSS 用于 Vaadin 组件?

    我似乎看到了一些例子 人们回答了如何通过添加 CSS 代码从组件中获取某些特定行为的问题 但是似乎没有人解释如何使用该 CSS 代码将其连接到 Java 组件 v table body overflow hidden important 例
  • 一个目录中的多个 Git 存储库

    我想将一个目录部署给具有不同权限的多个开发人员 所以这是 Git 无法做到的一件事 如何在一个目录中创建两个存储库 并通过使用排除由另一个存储库管理的文件来为它们分配不同的文件列表 gitignore file 例子 www project
  • MySQL“NOT IN”查询3个表

    我有 3 个表格课程 成绩和评估 我想比较两个表的等级和评价 如果表等级中的数据在表评价中不存在 则该数据会出现 输出 select Grade ID Courses Course ID Courses Grade NAME Course