Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >Null和IN()提供意外的结果

Null和IN()提供意外的结果
EN

Stack Overflow用户
提问于 2011-07-29 14:47:25
回答 3查看 131关注 0票数 6

这看起来很简单,我很惊讶,因为没有一个更好的词。我有两个表,我们称它们为albumsartists

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
CREATE TABLE `albums` (
  `album_id` bigint(20) NOT NULL AUTO_INCREMENT,
  `artist_id` bigint(20) DEFAULT NULL,
  `name` varchar(200) NOT NULL,
  PRIMARY KEY (`album_id`)
)
CREATE TABLE `artists` (
  `artist_id` bigint(20) NOT NULL AUTO_INCREMENT,
  `name` varchar(250) NOT NULL,
  PRIMARY KEY (`artist_id`)
)

每个表中有几十万个记录。某些专辑行的artist_id为空,这是意料之中的。

但是,当我执行以下查询来查找没有专辑的艺术家时:

SELECT * FROM artists WHERE artist_id NOT IN (SELECT artist_id FROM albums)

..。查询返回零个结果。我知道这不是真的。所以我尝试了这个:

SELECT * FROM artists WHERE artist_id NOT IN (SELECT artist_id FROM albums WHERE artist_id IS NOT NULL)

..。我得到了几千行数据。我的问题是:为什么第一个查询似乎基于任何数字= NULL的想法进行操作?或者这是NULL对IN()语句的一种奇怪的影响?我觉得这是我错过的最基本的东西。我通常在我的数据库表中根本不使用NULL。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-07-29 14:51:37

这就是为什么NOT EXISTS在语义上是正确的

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
SELECT * FROM artists ar
WHERE  NOT EXISTS
   (SELECT * FROM albums al WHERE ar.artist_id = al.artist_id)

逻辑:

  • NOT IN (x, y, NULL)实际上是
    • NOT (x OR y OR NULL)实际上是
      • (NOT x) AND (NOT y) AND (NOT NULL)

因此NULL会使整个NOT IN无效

票数 7
EN

Stack Overflow用户

发布于 2011-07-29 14:50:48

快速回答- IN语句是=a OR =b OR ...的快捷方式。如果你在这个列表中包含nulls,那么我认为这违反了声明。你的第二个选择可能是更好的选择。

或者使用join也可以,而且效率更高。

票数 7
EN

Stack Overflow用户

发布于 2011-07-29 14:55:19

这与SQL NULL的解释方式有关-您必须将它们视为未知值。

假设你有artist_id =1

如果您运行以下命令:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
artist_id = NULL

你得到的不是“False”,而是“未知”;

当您运行这样的查询时,只返回计算为'TRUE‘的值。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
artist_id IN (NULL, NULL, NULL...) = UNKNOWN
artist_id NOT IN (NULL, NULL, NULL....) = UNKNOWN
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6874926

复制
相关文章
git 取消跟踪
这样就可以了,如果后面跟的是目录就加上个 -r 就行了 (这个操作不会删除这个文件)
潇洒
2019/07/03
9490
git取消文件跟踪
在使用git的时候,有些文件是不需要上传的,所以就可以修改   .gitignore 
lin_zone
2018/08/15
1.3K0
git取消文件跟踪
git 取消文件跟踪
git rm --cached readme1.txt    删除readme1.txt的跟踪,并保留在本地。
西湖醋鱼
2020/12/30
1.5K0
git取消文件跟踪
在使用git的时候,有些文件是不需要上传的,所以就可以修改 .gitignore
全栈程序员站长
2022/07/07
1.5K0
git取消文件跟踪
git取消跟踪文件
取消跟踪文件: $git rm --cached FILENAME 取消跟踪目录: $git rm --cached FILENAME -r   最佳解决方案: 先清空,再加回来。 git rm -r --cached . #删除追踪状态 git add . git commit -m "fixed untracked files"
Ryan-Miao
2018/03/13
7540
git取消跟踪已版本控制的文件
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/119558.html原文链接:https://javaforall.cn
全栈程序员站长
2022/07/11
3280
Git 取消跟踪已版本控制的文件
Git 是一个很好的版本控制工具,当然驾驭起来相比 SVN 要稍微复杂一些。初入 Git,难免有一些问题。比如我们不小心将某个文件加入了版本控制,但是突然又不想继续跟踪控制这个文件了,怎么办呢?
技术小黑屋
2018/09/04
1.6K0
PHP打印跟踪调试信息
对于大部分编译型语言来说,比如 C 、 Java 、 C# ,我们都能很方便地进行断点调试,但是 PHP 则必须安装 XDebug 并且在编辑器中进行复杂的配置才能实现断点调试的能力。不过,如果只是简单的调试并且查看堆栈回溯的话,其实 PHP 已经为我们准备好了两个函数,能够让我们非常方便的看到程序运行时的调用情况。
硬核项目经理
2020/07/06
2K0
JQ + PHP + TrackMore物流信息跟踪
在使用之前,您需要先去trackmore官方网站申请API_KEY,传送门:TrackMore
Yiiven
2022/12/15
1.7K0
JQ + PHP + TrackMore物流信息跟踪
使用BTrace性能跟踪
BTrace是一个开源项目,开始于2007年,名声鹊起得益于2008年的JavaOne会议。
物流IT圈
2019/07/16
5820
使用BTrace性能跟踪
【目标跟踪】开源 | PolyTrack:使用边界多边形快速进行多目标跟踪和分割,替代包围框和遮罩跟踪
论文地址: http://arxiv.org/pdf/2111.01606v1.pdf
CNNer
2022/02/09
8720
【目标跟踪】开源 | PolyTrack:使用边界多边形快速进行多目标跟踪和分割,替代包围框和遮罩跟踪
度量,跟踪和日志记录
今天,我有幸参加了2017年的分布式追踪峰会,其中有很多来自AWS / X-Ray,OpenZipkin,OpenTracing,Instana,Datadog,Librato等公司的人员,我很遗憾我忘记了这一点。有一次讨论转向了项目范围和定义。跟踪系统是否也应该管理日志记录?什么确实的记录,通过在室内所代表的不同的镜头看?所有各种混凝土系统在哪里适合图片?
Java架构师必看
2021/07/13
7760
InnoDB克隆和页面跟踪
首先,我们将讨论支持InnoDB克隆技术的一些内部产品。MySQL企业版备份(MEB)是一种企业级产品,可为MySQL提供备份和恢复。在各种类型的备份中,我们关注下面两种类型:
MySQLSE
2021/01/08
1K0
跟踪综述推荐:目标跟踪40年
《中国图象图形学报》2019年第12期封面故事聚焦目标跟踪,对基于深度学习的目标跟踪算法进行系统的梳理。该成果是中国图象图形学学会机器视觉专委会牵头组织,浙江大学李玺教授、厦门大学王菡子教授等八位老师联名撰写的图像图形学科年度发展报告。
CV君
2020/02/12
2.3K0
跟踪算法(一)光流法跟踪
COPY FROM:http://blog.csdn.net/crzy_sparrow/article/details/7407604
全栈程序员站长
2022/09/15
1.2K0
Git 取消跟踪已版本控制的文件(亲测可行)
git 不再追踪文件改动 git update-index –assume-unchanged filePath
全栈程序员站长
2022/07/07
4150
事件相机特征跟踪-模板跟踪方法
由于事件相机不能提供完整的图像,所以最初的特征跟踪依赖传统相机的数据。本推送介绍事件相机特征检测与跟踪的一篇较早的工作:Feature Detection and Tracking with the Dynamic and Active-pixelVision Sensor (DAVIS),由ETH发表于2016年,衍生出了其它的方法,也被作为一类典型的特征追踪思路,即利用传统图形进行初始化与跟踪。
3D视觉工坊
2020/12/11
1K0
事件相机特征跟踪-模板跟踪方法
使用strace跟踪多进程程序
要跟踪的Taskdemo.php代码如下(即之前使用swoole实现的生产者消费者模型)。
跑马溜溜的球
2020/12/07
3K0
基于HTML5的Canvas指纹跟踪技术
时至今日有许多的方式来跟踪访客,例如使用存在用户端的cookie技术,这种技术现已被大部分公司遗弃,如今出现了一种新的方法替代cookie可以来跟踪用户。 在这两年中,许多网站和跟踪软件都开始利用HTML5 canvas指纹。PS:Canvas是HTML5中动态绘图的标签。 每个浏览器生成不一样的图案 从根本上来说,每一种浏览器都会使用不同的图像处理引擎,不同的导出选项,不同的压缩等级,所以每一台电脑绘制出的图形都会有些许不同,这些图案可以被用来给用户设备分配特定编号(指纹),也就是说可以用来识别不同用户。
FB客服
2018/02/02
1.9K2
sqlserver使用存储过程跟踪SQL
USE [master] GO /****** Object: StoredProcedure [dbo].[sp_perfworkload_trace_start] Script Date: 2017/7/6 19:48:52 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO
易墨
2018/09/14
1.7K0

相似问题

如何裁剪图像并使其具有响应性?

10

如何使其具有响应性?

118

如何更改标题的宽度并使其也具有响应性

219

如何在MUI中居中组件并使其具有响应性?

8113

我是否可以使用Bootstrap列来创建此分区,并使其具有响应性?

10
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文