4条回答 默认 最新
- Amo_lt 2019-11-26 14:09关注
我懂楼主问的意思,不管有没有加上那个id别名,id not in的数据应该是一样的,为什么一个是删了全表而另一个有保留。
讲道理,如果不加id别名,那个子查询 select id from (select max(num) from student group by name,age) t1 不应该报列名id不存在么。很奇怪,难道MySQL允许这样的写法?楼主可以试下单独运行这个子查询,看下是什么结果么?此处更正:我用Oracle试了下,单独运行子查询报错,但是整体sql运行不报错。。而且将select id from (select max(num)...的id替换成其他的列名,需要类型与max(num)一样才不会报错,不一样的类型就会报错。
以下更新回答:
通过查阅大佬的博客了解到,原来 NOT IN (子表结果集) ,就是等价于 WHERE ID <> B.ID, 这时如果子表结果集中含有 NULL ,也就是空的时候,就变成 <> NULL ,而由于NULL值不能参与比较运算符,所以导致条件不成立,从而查询不出来数据。
https://blog.csdn.net/sinat_35626559/article/details/81540114
不加别名,子查询应该是null的。然后not in null。所以条件不成立,查询不出数据,导致不会删除数据。
加了别名id就好理解了,因为查出来实际是num的值,但是id不存在与这些最大num相同的值,所以都会删除。可以试下将delete from改为select * ,将结果查询出来试下。
题主很厉害啊!又刷新了我的知识面~
而且我试了下将语句改为 id not in (select max(num) from student group by name,age)不管max(num) 后面加不加id,结果都是一样。只有你这种写法会造成两种结果。本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报
悬赏问题
- ¥15 下图接收小电路,谁知道原理
- ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
- ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
- ¥15 手机接入宽带网线,如何释放宽带全部速度
- ¥30 关于#r语言#的问题:如何对R语言中mfgarch包中构建的garch-midas模型进行样本内长期波动率预测和样本外长期波动率预测
- ¥15 ETLCloud 处理json多层级问题
- ¥15 matlab中使用gurobi时报错
- ¥15 这个主板怎么能扩出一两个sata口
- ¥15 不是,这到底错哪儿了😭
- ¥15 2020长安杯与连接网探