首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

MySQL错误: NOT IN +子查询使用GROUP BY HAVING不返回任何内容

MySQL错误: NOT IN +子查询使用GROUP BY HAVING不返回任何内容

这个错误通常发生在使用MySQL数据库时,使用NOT IN运算符结合子查询,并在子查询中使用GROUP BY和HAVING子句时。这种情况下,可能会出现不返回任何内容的情况。

出现这个错误的原因可能是以下几种情况之一:

  1. 子查询中的GROUP BY和HAVING子句导致结果集为空:当使用GROUP BY和HAVING子句时,需要确保子查询返回的结果集中包含符合条件的数据。如果子查询中的GROUP BY和HAVING子句导致结果集为空,那么NOT IN运算符将无法找到匹配的值,从而导致不返回任何内容。

解决方法:检查子查询中的GROUP BY和HAVING子句是否正确,并确保结果集中包含符合条件的数据。

  1. 子查询中的字段不匹配:在使用NOT IN运算符时,需要确保子查询和主查询中的字段匹配。如果字段不匹配,那么NOT IN运算符将无法找到匹配的值,从而导致不返回任何内容。

解决方法:检查子查询和主查询中的字段是否匹配,并确保它们具有相同的数据类型和长度。

  1. 子查询中的NULL值:如果子查询中存在NULL值,并且使用NOT IN运算符进行比较,那么结果可能会出现不返回任何内容的情况。这是因为在MySQL中,NULL值与任何其他值的比较结果都是未知的。

解决方法:检查子查询中是否存在NULL值,并根据实际需求使用IS NULL或IS NOT NULL进行比较。

总结起来,解决MySQL错误"NOT IN +子查询使用GROUP BY HAVING不返回任何内容"的方法包括确保子查询中的GROUP BY和HAVING子句正确,字段匹配,以及处理NULL值的情况。在实际应用中,可以根据具体的业务需求选择合适的查询方式和优化方法。

腾讯云相关产品推荐:

  • 云数据库 MySQL:https://cloud.tencent.com/product/cdb_mysql
  • 云数据库 MariaDB:https://cloud.tencent.com/product/cdb_mariadb
  • 云数据库 PostgreSQL:https://cloud.tencent.com/product/cdb_postgresql

以上是腾讯云提供的一些与MySQL相关的产品,可以根据具体需求选择适合的产品进行使用。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

为什么MySQL推荐使用查询和join

来源:cnblogs.com/liboware/p/12740901.html 1.对于mysql推荐使用查询和join是因为本身join的效率就是硬伤,一旦数据量很大效率就很难保证,强烈推荐分别根据索引单表取数据...2.查询就更别用了,效率太差,执行查询时,MYSQL需要创建临时表,查询完毕后再删除这些临时表,所以,查询的速度会受到一定的影响,这里多了一个创建和销毁临时表的过程。...三、推荐使用join的原因 1.DB承担的业务压力大,能减少负担就减少。...这种时候是建议跨库join的。目前mysql的分布式中间件,跨库join表现不良。...四、不使用join的解决方案 在业务层,单表查询出数据后,作为条件给下一个单表查询。也就是查询。会担心子查询出来的结果集太多。mysql对in的数量没有限制,但是mysql限制整条sql语句的大小。

3.8K30

MySQL 查询专题

你可以使用任何字段来作为排序的条件,从而返回排序后的查询结果。 你可以设定多个字段来排序。 你可以使用 ASC 或 DESC 关键字来设置查询结果是按升序或降序排列。 默认情况下,它是按升序排列。...查询 版本要求 MySQL 4.1 引入了对子查询的支持,所以要想使用本章描述的 SQL,必须使用MySQL 4.1 或更高级的版本。...通常,查询返回单个列并且与单个列匹配,但如果需要也可以使用多个列。 虽然查询一般与IN操作符结合使用,但也可以用于测试等于(=)、不等于()等。...企图检索多个列将返回错误。 tip: 逐渐增加查询来建立查询查询测试和调试查询很有技巧性,特别是在这些语句的复杂性不断增加的情况下更是如此。...用查询建立(和测试)查询的最可靠的方法是逐渐进行,这与 MySQL 处理它们的方法非常相同。首先,建立和测试最内层的查询。然后,用硬编码数据建立和测试外层查询,并且仅在确认它正常后才嵌入查询

5K30

MYSQL基本操作-select 查询语句【续】

查询 查看图书类别表中有图书的类别id和类别名称 常见错误写法 正确写法 ---- 前言 内容MYSQL基本操作-select 查询语句【续】 聚合函数 最大值(max) select max(bookprice...group by 关键字可以根据一个或多个字段对查询结果进行分组 group by 一般都会结合Mysql聚合函数来使用 如果需要指定条件来过滤分组后的结果集,需要结合 having 关键字;原因:where...即先对select xx from xx的记录集合用where进行筛选,然后再使用group by 对筛选后的结果进行分组 使用having字句对分组后的结果进行筛选 需要注意having和where...的用法区别: having只能用在group by之后,对分组后的结果进行筛选(即使用having的前提条件是分组)。...,用 not exists 都比 not in 速度快 1、A是表达式,B是查询结果集2、若A在B里面,则返回True 总结 查询语句可以嵌套在 sql 语句中任何表达式出现的位置 字段、

1.7K40

MySQL学习笔记(长期更新)

Group By 作用:对查询出的数据分组,通常与聚合函数使用 HAVING:⽤于筛选查询结果,跟WHERE类似。...HAVING是先连接后筛选,所以WHERE比HAVING更高效 WHERE可以直接使用表中字段作为筛选条件,但不能使用分组中的计算函数作为筛选条件,HAVING必须要与GROUP BY配置使用,可以把分组计算的函数和分组字段作为筛选条件...派生表:如果我们在查询中把子查询的结果作为一个表来使用,这个表就是派生表。 查询返回结果集进行分类: 表查询返回的结果是一个行的集合,N行N列,(N>=1)。...表查询经常用于父查询的FROM子句中。 行查询返回的结果是一个列的集合,一行N列,(N>=1)。行查询常用于父查询的FROM字句和WHERE字句中。...使用查询规则: 一个查询必须放在圆括号内 将查询放在比较条件的右边以增加可读性 查询包含ORDER BY字句,对一个SELECT语句只能有一个ORDER BY字句,如果使用的话,只能放在主SELECT

92210

MySQL 5.6 5.7 组内排序的区别

MySQL 5.7 对比 5.6 有很多的变化。一个常见的需求:按条件分组后,取出每组中某字段最大值的那条记录。其实就是组内排序的问题,我的做法是:查询先进行倒序排序,外层查询分组。...MySQL 扩展了 GROUP BY 的标准 SQL 使用,以便选择列表可以引用 GROUP BY 子句中未命名的非集合列。这意味着前面的查询MySQL 中是合法的。...如果启用了 ONLY_FULL_GROUP_BY SQL 模式(默认情况下),MySQL 将拒绝对列表,HAVING 条件或 ORDER BY 列表的查询引用在 GROUP BY 子句中既未命名的非集合列...SELECT 查询的字段必须是 GROUP BY 中出现的或者使用聚合函数的或者是具有唯一索引的。...;而开启 STRICT_ALL_TABLES 后,则表现为写入数据,且抛出错误

48920

一文带你剖析MySQL到底都有哪些常用的查询

在条件表达式中不能使用字段的别名 表别名只在执行查询使用,并不在返回结果中显示。而字段定义别名之后,会返回给客户端显示,显示的字段为字段的别名。...DESC是从大到小,ASC是从小到大 使用 ORDER BY 关键字应该注意以下几个方面: ORDER BY 关键字后可以跟查询(关于查询后面教程会详细讲解,这里了解即可)。...由结果可以看出,如果 SELECT 关键字后没有查询HAVING 查询条件中使用的 status 字段,MySQL 会提示错误信息:“having子句”中的列“status”未知”。...案例:使用 HAVING 和 WHERE 关键字分别查询status等于0的结果 # 根据hosts表中的status字段进行分组,并通过group_concat将每个分组字段name的内容显示出来,查询全量...字段进行分组,并通过group_concat将每个分组字段name的内容显示出来,通过having关键字过滤为0的结果 mysql> select status,group_concat(name) from

3.9K20

SQL优化极简法则,还有谁不会?

法则三:尽量避免使用查询MySQL 为例,以下查询返回月薪大于部门平均月薪的员工信息: EXPLAIN ANALYZE SELECT emp_id, emp_name FROM employee...以上示例在 Oracle 和 SQL Server 中会自动执行查询展开,两种写法效果相同;在 PostgreSQL 中与 MySQL 类似,第一个语句使用 Nested Loop Join,改写为...另外,对于 IN 和 EXISTS 查询也可以得出类似的结论。由于不同数据库的优化器能力有所差异,我们应该尽量避免使用查询,考虑使用 JOIN 进行重写。...如果存在 GROUP BY 子句或者 DISTINCT 关键字,只能使用分组字段和聚合函数进行排序;否则,可以使用 FROM 和 JOIN 表中的任何字段排序。...如果使用GROUP BY 分组,之后的 SELECT、ORDER BY 等只能引用分组字段或者聚合函数;否则,可以引用 FROM 和 JOIN 表中的任何字段。

1K20

SQL 优化极简法则,还有谁不会?

万圣节快乐 文章目录 法则一:只返回需要的结果 法则二:确保查询使用了正确的索引 法则三:尽量避免使用查询 法则四:不要使用 OFFSET 实现分页 法则五:了解 SQL 子句的逻辑执行顺序 总结...以上示例在 Oracle 和 SQL Server 中会自动执行查询展开,两种写法效果相同;在 PostgreSQL 中与 MySQL 类似,第一个语句使用 Nested Loop Join,改写为...另外,对于 IN 和 EXISTS 查询也可以得出类似的结论。由于不同数据库的优化器能力有所差异,我们应该尽量避免使用查询,考虑使用 JOIN 进行重写。...如果存在 GROUP BY 子句或者 DISTINCT 关键字,只能使用分组字段和聚合函数进行排序;否则,可以使用 FROM 和 JOIN 表中的任何字段排序; 最后,OFFSET 和 FETCH(LIMIT...如果使用GROUP BY 分组,之后的 SELECT、ORDER BY 等只能引用分组字段或者聚合函数;否则,可以引用 FROM 和 JOIN 表中的任何字段。

1.2K20

玩转Mysql系列 - 第12篇:查询(非常重要,高手必备)

这是Mysql系列第12篇。 环境:mysql5.7.25,cmd命令中进行演示。 本章节非常重要。 查询 出现在select语句中的select语句,称为查询或内查询。...后面的查询 where或having后面,可以使用 标量子查询(单行单列行查询) 列子查询(单列多行查询) 行查询(多行多列) 特点 查询放在小括号内。...= 列子查询,一般搭配着多行操作符使用 in(not in):列表中的“任意一个” any或者some:和查询返回的“某一个值”比较,比如a>som(10,20,30),a大于查询中任意一个即可,a...in:in常用于where表达式中,其作用是查询某个范围内的数据 any和some一样: 可以与=、>、>=、结合起来使用,分别表示等于、大于、大于等于、小于、小于等于、不等于其中的任何一个数据...:查询返回的结果超过了1行记录。

1K10

MySQL 查询优化源码分析

通常情况下,我们可以将出现在SELECT、WHERE和HAVING语法中的查询块称为嵌套子查询,出现在FROM语法后的查询块称为内联视图或派生表。...本篇将会结合源码介绍在MySQL中针对子查询的几种优化策略。 1 查询定义 查询定义在一个完整的查询语句中包含的查询块被称为查询。...本篇文章将会结合源码介绍在MySQL中针对子查询的几种优化策略。...必须是单个查询块,不带有UNION。 包含HAVING语法。 包含任何聚合函数。 包含LIMIT语法。 外查询语句没有使用STRAIGHT_JOIN语法。...Item_sum::ref_by数组中 |--and_items() // 加入到HAVING条件中 |--如果包含聚合函数、窗口函数、GROUP语法、HAVING语法,将判断条件加入WHERE语句中

2K20

SQL 优化极简法则,你掌握几个?

关于各种主流数据库中执行计划的查看和解释,可以参考:https://tonydong.blog.csdn.net/article/details/103579177  三、尽量避免使用查询MySQL...以上示例在 Oracle 和 SQL Server 中会自动执行查询展开,两种写法效果相同;在 PostgreSQL 中与 MySQL 类似,第一个语句使用 Nested Loop Join,改写为...另外,对于 IN 和 EXISTS 查询也可以得出类似的结论。由于不同数据库的优化器能力有所差异,我们应该尽量避免使用查询,考虑使用 JOIN 进行重写。...如果存在 GROUP BY 子句或者 DISTINCT 关键字,只能使用分组字段和聚合函数进行排序;否则,可以使用 FROM 和 JOIN 表中的任何字段排序; 最后,OFFSET 和 FETCH(LIMIT...如果使用GROUP BY 分组,之后的 SELECT、ORDER BY 等只能引用分组字段或者聚合函数;否则,可以引用 FROM 和 JOIN 表中的任何字段。

1.1K10

Vc数据库编程基础MySql数据库的表查询功能

Vc数据库编程基础MySql数据库的表查询功能 一丶简介   不管是任何数据库.都会有查询功能.而且是很重要的功能.上一讲知识简单的讲解了表的查询所有....]     [group by 字段名]     [having 过滤条件] 1、group by子句   根据给定列或者表达式的每一个不同的值将表中的行分成不同的组,使用组函数返回每一组的统计信息 规则...by子句,group_concat返回一列的所有值 例2:得到所有的罚款编号列表 mysql> select group_concat(paymentno) -> from PENALTIES...having语句与where语句区别:   where子句在分组前对记录进行过滤;   having子句在分组后对记录进行过滤 mysql> select salary,count(*) from...可以单独使用而不和GROUP BY配合,如果只有HAVING子句而没有GROUP BY,表中所有的行分为一组 2)HAVING子句中可以使用组函数 3)HAVING子句中的列,要么出现在一个组函数中,要么出现在

9.7K30

如何写优雅的SQL原生语句?

sql各语句执行顺序概览与讲解 项目实战中的一段sql说明讲解 sql语句中别名的使用 书写sql语句的注意事项 前言 上一篇讲Mysql基本架构时,以“sql查询语句在MySql架构中具体是怎么执行的...1. from form是一次查询语句的开端。 如果是一张表,会直接操作这张表; 如果这个from后面是一个查询,会先执行查询中的内容查询的结果也就是第一个虚拟表T1。...having 应用having筛选器,生成T5。HAVING子句主要和GROUP BY子句配合使用having筛选器是第一个也是为唯一一个应用到已分组数据的筛选器。 8....别名也可以在group by与having的时候都可使用 别名可以在order by排序的时候被使用 查看上面一段sql delete , update MySQL都可以使用别名,别名在多表...操作中任何一个子句可使用索引都会提高查询性能,但是or条件中任何一个不能使用索引,都将导致查询性能下降,如where member_no = 1 or provider_no = 1,在member_no

1.8K20

MySQL核心知识》第6章:查询语句

select语句查询f_id字段的数据 SELECT f_id,f_name FROM fruits 注意:MYSQL中SQL语句是区分大小写的,因此select和SELECT作用是相同的。...s_id SQLSERVER是没有GROUP_CONCAT()函数的,SQLSERVER要达到同样效果需要使用xml函数,MYSQL这方面做得非常好 having:过滤分组 根据s_id对fruits...中可以使用 LIMIT 4 OFFSET 3 ,意思是获取从第5行记录开始的3条记录,和 LIMIT 4,3 返回的结果是一样的 查询 查询这个特性从「MySQL4.1」开始引入。...INTO tbl1 VALUES(1),(4),(13),(27); INSERT INTO tbl2 VALUES(6),(14),(11),(20) ANY关键字接在一个比较操作符的后面,表示若与查询返回任何值比较为...(SELECT num2 FROM tbl2) ALL关键字接在一个比较操作符的后面,表示与查询返回的所有值比较为TRUE,则返回TRUE SELECT num1 FROM tbl1 WHERE

75130

高级查询、内外连接

1.EXISTS查询 语法: select .......from 表名 where exists(查询) 查询返回结果: EXISTS查询结果为TRUE,则执行外层查询 查询返回结果:...EXISTS查询结果为FALSE,外层查询执行 当数据量大的时候使用exists,如数据量于一万以上使用,数据量少时可以使用in 示例: /*1.检查‘logic java’ 课程最近一次考试成绩*...可以采用NOT EXISTS检测是否全部未通过考试,即不存在“成绩>=60分”的记录 3.查询注意事项 (1)任何允许使用表达式的地方都可以使用查询 (2)嵌套在父查询SELECT语句的查询可包括...: SELECT子句 FROM子句 WHERE子句 GROUP BY子句 HAVING子句 (3)只出现在IN查询中而没有出现在父查询中的列不能包含在输出列中 4.分组查询用法 SELECT列表中只能包含...: 1.被分组的列 2.为每个分组返回一个值的表达式,如聚合函数 掌握GROUP BY子句实现分组查询语法: SELECT …… FROM WHERE …… GROUP BY …… 示例: SELECT

60720
领券