YXTS122 2019-11-26 11:56 采纳率: 100%
浏览 417
已采纳

加了id就删了全表,不加id表就保留了

图片说明

图片说明

  • 写回答

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,结果都是一样。只有你这种写法会造成两种结果。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

悬赏问题

  • ¥15 下图接收小电路,谁知道原理
  • ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
  • ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
  • ¥15 手机接入宽带网线,如何释放宽带全部速度
  • ¥30 关于#r语言#的问题:如何对R语言中mfgarch包中构建的garch-midas模型进行样本内长期波动率预测和样本外长期波动率预测
  • ¥15 ETLCloud 处理json多层级问题
  • ¥15 matlab中使用gurobi时报错
  • ¥15 这个主板怎么能扩出一两个sata口
  • ¥15 不是,这到底错哪儿了😭
  • ¥15 2020长安杯与连接网探