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

MySQL不在子查询不按预期工作

关于MySQL子查询不按预期工作的问题,这可能是由于子查询的结果集与预期不符,或者子查询的结构不正确导致的。以下是一些建议和可能的解决方案:

  1. 确保子查询返回的结果集与预期相符。可以通过单独运行子查询来检查其结果集是否正确。
  2. 确保子查询的结构正确。子查询应该包含在主查询中,并且应该使用正确的关键字和操作符。例如,可以使用SELECT * FROM table1 WHERE column1 IN (SELECT column2 FROM table2)来查询满足条件的记录。
  3. 如果子查询返回多个列,请确保使用正确的列名或列别名。例如,如果子查询返回两个列,可以使用SELECT * FROM table1 WHERE column1 IN (SELECT column2, column3 FROM table2)来查询满足条件的记录。
  4. 如果子查询返回多行,请确保使用正确的关键字来连接子查询和主查询。例如,可以使用SELECT * FROM table1 WHERE column1 IN (SELECT column2 FROM table2)来查询满足条件的记录。
  5. 如果子查询返回的结果集中包含NULL值,请确保使用正确的关键字来处理NULL值。例如,可以使用SELECT * FROM table1 WHERE column1 = (SELECT column2 FROM table2)来查询满足条件的记录。

如果以上建议仍无法解决问题,请提供更多关于问题的详细信息,以便更好地帮助您解决问题。

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

相关·内容

为什么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

必知必会——关于SQL中的NOT IN优化

因此,就我的意图而言,NULL不可能是煤炭或木材,因此我希望IN返回A,并且我希望NOT IN返回A。 那么,应该怎么做才能使NOT IN表现出预期的效果? 简单!...“ NOT IN(查询)”也会发生相同的问题。让我们添加此表: ? 查询加热产生二氧化碳的房屋: ? >没有结果。 再次缺少A。同样,解决方案是: ? 现在我得到A。...我可以改写为NOT EXISTS,但这是需要更多的编辑工作: ? 这也返回A。 如果我做两次重写中的任何一个,我就会以某种方式向MySQL声明我希望NULL是我的NOT IN的明确匹配项。...我们可以在EXPLAIN中进行检查;首先,我们有一个初始的NOT IN,其中一个查询计划显示每个房屋执行一个查询,并且每次都进行表扫描(这效率很低): ?...现在我的搜索查询时间是: ? 反联接计划以更少的百分之二十的时间返回更多的行(如预期的那样,包括NULL)。

4.4K40

分布式 | DBLE 3.21.06.0 来了!

新版 DBLE 新增&重构功能 8 个,修复缺陷 10+ 个,和旧版本的兼容项调整 2 处。...主要更新: 1、提供了一个开关,决定是否将 in-Subquery 转换为 join 在此版本之前,我们会默认将in查询尝试转为 join 来生成执行计划,现在我们增加一个全局配置项,由用户来决定是否应该转化...2、查询计划的进一步优化 如果一条复杂查询查询和外部使用了同一张表,并且路由的结果也一致,那么这条 sql 应该被直接下发,而不是重写后下发算子 3、支持 XA 事务的残留检查 由于各种原因,mysql...主要缺陷修复: [#2622] set autocommit 没有预期工作。 [#2638] 开着慢日志,dble 可能会出现 oom。...未按照预期执行 偶现的 ArrayIndexOutOfBoundException 3.21.02.2 复杂查询可能导致的线程泄漏 开着慢日志,dble 可能会出现 oom 检查表一致性问题 读写分离中

2.7K20

【原创】MySQL数据库开发中的6个“避免”

MySQL并不擅长数学运算和逻辑判断,所以尽量不在数据库做运算,复杂运算可以移到程序端CPU。...2、避免对索引列做运算 有次,有位同事让我看一条SQL,说是在前台查询很快,但是把SQL取出来,在数据库中执行的时候,跑10分钟都不出结果。 看了一下SQL,最后定位到一个视图中的一个查询上面。...该查询的SQL文本如下: SELECT acinv_07.id_item , SUM(acinv_07.dec_endqty) dec_endqty FROM acinv_07...(*)相当于同一个语句查询了两次,对数据库的开销自然就大了,我们应当使用数据库自带的API,或者系统变量来完成这个工作。..."zhaoyun"),(2,"zhangfei"),(3,"liubei") insert into table2 values (1,"zhaoyun"),(2, null) (1) NOT IN查询在有

56830

mysql中find_in_set()函数的使用

一个字符串列表就是一个由一些被 ‘,’ 符号分开的链组成的字符串。如果第一个参数是一个常数字符串,而第二个是type SET列,则FIND_IN_SET() 函数被优化,使用比特计算。...如果str不在strlist 或strlist 为空字符串,则返回值为 0 。如任意一个参数为NULL,则返回值为 NULL。这个函数在第一个参数包含一个逗号(‘,’)时将无法正常运行。...2的用户,如果用like关键字的话,则查询结果如下: SELECT * FROM users WHERE limits LIKE '%2%'; 这样第二条数据不具有权限'2'的用户也查出来了,不符合预期...一个字符串列表就是一个由一些被 ‘,’ 符号分开的链组成的字符串。如果第一个参数是一个常数字符串,而第二个是type SET列,则FIND_IN_SET() 函数被优化,使用比特计算。...2的用户,如果用like关键字的话,则查询结果如下: SELECT * FROM users WHERE limits LIKE '%2%'; 这样第二条数据不具有权限'2'的用户也查出来了,不符合预期

3.3K40

为什么公共事业机构会偏爱 TiDB :TiDB 数据库在某省妇幼健康管理系统的应用

架构总体上分为四块,自底向上分别是:数据层:源端数据源主要是 MySQL 为主的关系型数据库。分别搭建 5 套(10 台)主从分别承接 14 个子库和 1 个总库 MySQL 库 700+表。...DBA 工作压力巨大:当前架构对 DBA 的工作强度要求较高。...地市分割的数据库不利于跨市业务服务的兼容,例如,报表通常需要通过创建宽表来汇总各数据库的数据,这导致宽表数量不断增加。此外,还存在档案重复和无法跨地市查询服务记录等问题。...分析层改造后收益在将 StarRocks 替换为 TiFlash 后, 与地市分库的 S tarR oc ks 相比, 我们发现整体查询效率并未显著提高,经过优化,常用的查询 已能够达到预期的性能标准...(全量快照+实时日志备份)可保证数据丢失。BR 还原数据超乎预期,300G 数据还原用时 20 分钟(v7.1.3),官方最新版本 v7.6 最新版本 BR 还原能力提升 10 倍。

5410

Mysql进阶优化篇05——查询的优化和排序优化

MySQL 从 4.1 版本开始支持查询,使用查询可以进行 SELECT 语句的嵌套查询,即一个 SELECT 查询的结果作为另一个 SELECT 语句的条件。...查询可以一次性完成很多逻辑上需要多个步骤才能完成的操作 。 查询MySQL 的一项重要的功能,可以帮助我们通过一个 SQL 语句实现比较复杂的查询。但是,查询的执行效率不高。...原因: 执行查询时,MySQL 需要为内层查询语句的查询结果建立一个临时表 ,然后外层查询语句从临时表中查询记录。查询完毕后,再撤销这些临时表 。...对于返回结果集比较大的查询,其对查询性能的影响也就越大。 在 MySQL 中,可以使用连接(JOIN)查询来替代子查询。...场景:查询年龄为30岁的,且学生编号小于101000的学生,用户名称排序 先删除以前的索引。再测试如下sql。

1.9K20

T-SQL基础(三)之子查询与表表达式

查询 在嵌套查询中,最外面查询结果集返回给调用方,称为外部查询。嵌套在外部查询内的查询称为查询查询的结果集供外部查询使用。 根据是否依赖外部查询,可将查询分为自包含查询和相关子查询。...自包含查询不依赖外部查询,相关子查询则依赖外部查询查询结果是在运行时计算的,查询结果会跟随查询表的变化而改变。查询可以返回单个值(标量)、多个值或者整个表结果。...有时候会看到即使外部查询未使用ORDER BY但查询结果集预期顺序返回了结果,这是由于数据库自身优化的结果,依然无法保证每次查询都能预期结果返回。...视图 视图是虚拟表,自身包含数据,只存储了动态查询语句,多用于简化复杂查询。 视图创建后被作为数据库对象而存储到数据库中,除非显式进行删除。因此,同一个视图可以被不同的查询多次使用。...关于是否应该使用视图,仁者见仁,智者见智: 使用SQL Server视图的优缺点 为什么mysql中很少见到使用视图功能?

1.6K40

T-SQL基础(三)之子查询与表表达式

查询 在嵌套查询中,最外面查询结果集返回给调用方,称为外部查询。嵌套在外部查询内的查询称为查询查询的结果集供外部查询使用。 根据是否依赖外部查询,可将查询分为自包含查询和相关子查询。...自包含查询不依赖外部查询,相关子查询则依赖外部查询查询结果是在运行时计算的,查询结果会跟随查询表的变化而改变。查询可以返回单个值(标量)、多个值或者整个表结果。...有时候会看到即使外部查询未使用ORDER BY但查询结果集预期顺序返回了结果,这是由于数据库自身优化的结果,依然无法保证每次查询都能预期结果返回。...视图 视图是虚拟表,自身包含数据,只存储了动态查询语句,多用于简化复杂查询。 视图创建后被作为数据库对象而存储到数据库中,除非显式进行删除。因此,同一个视图可以被不同的查询多次使用。...关于是否应该使用视图,仁者见仁,智者见智: 使用SQL Server视图的优缺点 为什么mysql中很少见到使用视图功能?

1.4K10

delete in查询走索引?!

;显然,这个执行计划和我们预期不符合,因为并没有走索引。...`name`) 可以发现,实际执行的时候,MySQL对select in查询做了优化,把子查询改成join的方式,所以可以走索引。...但是很遗憾,对于delete in查询MySQL却没有对它做这个优化。 优化方案 那如何优化这个问题呢?通过上面的分析,显然可以把delete in查询改为join的方式。...实际上,对于update或者delete查询的语句,MySQL官网也是推荐join的方式优化 其实呢,给表加别名,也可以解决这个问题哦,如下: explain delete a from account...因此,加别名就可以让delete in查询走索引啦! 总结 本博文分析了delete in查询走索引的原因,并附上解决方案。

2.5K40

Mysql优化大师三」查询执行计划explain详解,含案例

UNION结果总是放在一个匿名临时表中,之后mysql将结果读取到临时表中。临时表并不在原sql中出现,因此它的id列是null。...Estimate of rows to be examined 案例: --sample:简单的查询包含查询和union explain select * from emp; --primary...通常意味着mysql将扫描整张表,从头到尾,去找到需要的行。 index 这个跟全表扫描一样,只是mysql扫描表时索引次序进行而不是行。...如果在Extra列中看到了“Using index”,说明mysql正在使用覆盖索引,它只扫描索引的数据,而不是索引次序的每一行。它比索引次序全表扫描的开销要少很多。...key_len 表示索引中使用的字节数,可以通过key_len计算查询中使用的索引长度,在损失精度的情况下长度越短越好。

1.1K10

最完整的Explain总结,妈妈再也担心我的SQL优化了

在 select 语句之前增加 explain 关键字,MySQL 会在查询上设置一个标记,执行查询时,会返回执行计划的信息,而不是执行这条SQL(如果 from 中包含查询,仍会执行该查询,将结果放入临时表中...MySQL将 select 查询分为简单查询(SIMPLE)和复杂查询(PRIMARY)。 复杂查询分为三类:简单子查询、派生表(from语句中的查询)、union 查询。...1.simple简单查询查询包含查询和union mysql> explain select * from film where id = 2; ?...最完整的Explain总结,妈妈再也担心我的SQL优化了 2)primary:复杂查询中最外层的 select 3)subquery:包含在 select 中的查询不在 from 子句中) 4)derived...:包含在 from 子句中的查询

73320

MySQL EXPLAIN执行计划详解

增加了EXPLAIN之后,MySQL可能仍然会执行部分查询,如果查询中FROM字句中包括查询,那么MySQL实际会执行查询的,并将其结果放在一个临时表中,然后完成外层查询优化。...例如UNION查询中最后对于临时表的查询,它的id就为null,因为临时表并不在原sql中出现。...其他部分标记如下: SUBQUERY,包含在SELECT子句(不在from子句中)中的查询的SELECT,结果不依赖于外部查询。 DERIVED,包含在from子句中的查询中的SELECT。...Using filesort:MySQL会对结果使用一个外部索引排序,而不是索引次序从表里读取行,即filesort(文件排序)。...本站仅提供信息存储空间服务,拥有所有权,承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

1.7K140

Mysql进阶-3】大量实例悟透EXPLAIN与慢查询

,如Using index、Using where等 1、select_type表示查询类型,包括简单查询、复杂查询查询等: 类型 释义 SIMPLE 简单的SELECT查询查询包含查询或...UNION PRIMARY 查询中若包含任何复杂的子部分,最外层查询被标记为PRIMARY SUBQUERY 在SELECT或WHERE中包含了查询 DERIVED 在FROM中包含的查询被标记为DERIVED...,MySQL会递归执行这些查询,把结果放在临时表里 UNION 若第二个SELECT出现在UNION之后,则被标记为UNION,若UNION包含在FROM子句的查询中,外层SELECT将被标记为DERIVED...s_id FROM class_student) 上面的查询并没有出现预期的SUBQUERY型select_type: ?...条件: 至少有一个查询列与条件列不在同一个索引树上,WHERE 条件列是索引前导列且是范围查询 至少有一个查询列与条件列不在同一个索引树上,WHERE 条件列是索引前导列且是后置模糊查询 示例: 1)

1.3K30

面试前必须知道的MySQL命令【expalin】

(一般有查询的SQL语句id就会不同) ?...explain一下拥有查询的SQL 1.3.2select_type 表示select查询的类型 select_type属性下有好几种类型: SIMPLLE:简单查询,该查询包含 UNION 或查询...中的第二个或者随后的查询,其次取决于外面的查询 UNION RESULT:UNION 的结果 SUBQUERY:查询中的第一个select语句(该查询不在from子句中) DEPENDENT SUBQUERY...当from子句中有查询时,table列是 格式,表示当前查询依赖 id=N的查询,于是先执行 id=N 的查询 1.3.4type 该列称为关联类型或者访问类型,它指明了MySQL...Using filesort:对结果使用一个外部索引排序,而不是索引次序从表里读取行,一般有出现该值,都建议优化去掉,因为这样的查询 CPU 资源消耗大。

97520

千万级数据表选错索引导致的线上慢查询事故

试想一个月黑风高的夜晚,公司线上突然挂了,而你的同事们都不在线,就你一个人有条件解决问题,这时候如果被工程师的基本功把你卡住了,就问你尴尴尬......Explain比较重要的字段有: select_type : 查询类型,有简单查询、联合查询查询等 key : 使用的索引 rows : 预计需要扫描的行数 更多详细Explain介绍可以参考:MySQL...MySQL索引选择原理 优化器索引选择的准则 MySQL一条语句的执行流程大致如下图,而「查询优化器」则是选择索引的地方: 引用参考文献一段解释: ❝首先要知道,选择索引是MySQL优化器的工作。...干涉优化器选择:写成查询 还有什么办法?我们可以用查询,在查询里先走city_id和type的联合索引,得到结果集后在limit1选出第一条。...但是查询使用有风险,一版DBA也建议使用查询,会建议大家在代码逻辑中完成复杂的查询

1.4K30

MySQL排序与分页详解

多列排序 SELECT last_name, department_id, salary FROM employees ORDER BY department_id, salary DESC; 可以使用不在...MySQL中使用 LIMIT 实现分页 格式: LIMIT [位置偏移量,] 行数 第一个 “位置偏移量” 参数指示MySQL从哪一行开始显示,是一个可选参数,如果指定“位置偏移量”,将会从表中的第一条记录开始...我会在后面讲到查询,你可以使用: SELECT rownum, last_name, salary FROM ( SELECT last_name, salary FROM employees ORDER...练习题 1.查询员工的姓名和部门号和年薪,年薪降序姓名升序显示 SELECT last_name, department_id, salary * 12 annual_salary FROM employees...ORDER BY annual_salary DESC, last_name ASC; 2.选择工资不在 8000 到 17000 的员工的姓名和工资,工资降序,显示第21到40位置的数据 SELECT

1.9K60

MySQL选错索引导致的线上慢查询事故复盘

试想一个月黑风高的夜晚,公司线上突然挂了,而你的同事们都不在线,就你一个人有条件解决问题,这时候如果被工程师的基本功把你卡住了,就问你尴尴尬… 本文的主要内容: 故障描述 问题原因排查 MySQL索引选择原理...Explain比较重要的字段有: select_type : 查询类型,有简单查询、联合查询查询等 key : 使用的索引 rows : 预计需要扫描的行数 更多详细Explain介绍可以参考:MySQL...MySQL索引选择原理 优化器索引选择的准则 MySQL一条语句的执行流程大致如下图,而查询优化器则是选择索引的地方: ? 引用参考文献一段解释: 首先要知道,选择索引是MySQL优化器的工作。...干涉优化器选择:写成查询 还有什么办法?我们可以用查询,在查询里先走city_id和type的联合索引,得到结果集后在limit1选出第一条。...但是查询使用有风险,一版DBA也建议使用查询,会建议大家在代码逻辑中完成复杂的查询

94140
领券