今天在看实验室的项目时,碰到的一个问题,。先把sql语句扔出来

// 这条语句在id没有1时,不能得到正确的查询结果。
select min(id+1) from oslist c where not exists (select id from oslist where id = c.id+1);

刚开始看到这条查询语句,完全是一脸懵X的状态,可能也是好久没碰sql了。

1 exists语法

sql语法中,exists用来筛选结果。实际执行过程中,exists语句是对外表作loop循环,每次loop循环再对内表进行查询操作。把外表的记录逐条代入到子查询,如果子查询结果集为空,说明不存在,反之,则存在。

此处要注意的是,这里把外表的记录代入到子查询中,只是看得到的查询结果是否为,而不是做实质性的值比较。

举个例子吧:

如果表oslist中的id为1,2,3,4,5,6,7,8,9,10,11,14,15。此处采用文章最开始的sql语句,使用自连接

那么在查询过程如下:

取id为1,看oslist中存在id = 2的否?,存在,则不纳入结果集;

取id为2,看oslist中存在id = 3的否?,存在,则不纳入结果集;

取id为3,看oslist中存在id = 4的否?,存在,则不纳入结果集;

取id为4,看oslist中存在id = 5的否?,存在,则不纳入结果集;

取id为5,看oslist中存在id = 6的否?,存在,则不纳入结果集;

取id为6,看oslist中存在id = 7的否?,存在,则不纳入结果集;

取id为7,看oslist中存在id = 8的否?,存在,则不纳入结果集;

取id为8,看oslist中存在id = 9的否?,存在,则不纳入结果集;

取id为9,看oslist中存在id = 10的否?,存在,则不纳入结果集;

取id为10,看oslist中存在id = 11的否?,存在,则不纳入结果集;

取id为11,看oslist中存在id = 12的否?,不存在,则纳入结果集;

取id为14,看oslist中存在id = 15的否?,存在,则不纳入结果集;

取id为15,看oslist中存在id = 16的否?,不存在,则纳入结果集;

取(11+1)与(15+1)中值最小的那个,然后返回结果。

结束查询。

mysql查询表中最小可用id值的更多相关文章

  1. 最小可用id

    题目:在非负数组(乱序)中找到最小的可分配的id(从1开始编号),数据量10000000. 题目解读:在一个不重复的乱序的自然数组中找到最小的缺失的那个数,比如1,2,3,6,4,5,8,11.那么最 ...

  2. Mysql 查询表中某字段的重复值,删除重复值保留id最小的数据

    1 查询重复值 ); 2 删除重复值 -- 创建临时表 ) ); -- 把重复数据放进临时表 INSERT Hb_Student_a SELECT id,studentNumber FROM Hb_S ...

  3. MySQL 查询表中某字段值重复的数据

    MySQL中,查询表(dat_bill_2018_11)中字段(product_id)值重复的记录: ; 说明:先用GROUP BY 对 product_id 进行分组,同时使用COUNT(*)进行统 ...

  4. 在弹框中获取foreach中遍历的id值,并传递给地址栏(方法2)

    1.php有时候我们需要再弹框中获取foreach中遍历的数据(例如id),在弹框中点击按钮并传递给地址栏跳转.那么应该怎么做呢.第二种方法. 2. 可以在弹框中给出一个input hidden 点击 ...

  5. 在弹框中获取foreach中遍历的id值,并传递给地址栏。

    1.php有时候我们需要再弹框中获取foreach中遍历的数据(例如id),在弹框中点击按钮并传递给地址栏跳转.那么应该怎么做呢. 2. 点击取现按钮,如果没有设置密码->弹框 3. 点击去设置 ...

  6. Java获取最后插入MySQL记录的自增ID值方法

    方法一: String sql = "INSERT INTO users (username,password,email) VALUES (?,?,?);"; PreparedS ...

  7. MySql 查询表中字段的数据类型

    [1]MySQL中查询某表中字段的数据类型 (1)DESC 表名: (2)DESCRIBE 表名: (3)SHOW COLUMNS FROM 表名: 应用示例: DESC cfg_acct_free_ ...

  8. Django ORM 查询表中某列字段值

    场景: 有一个表中的某一列,你需要获取到这一列的所有值,你怎么操作? 解决办法: 有一个model为:Event 方式一: 获取内容: Event.objects.values('title') 输出 ...

  9. MySQL查询表中某个字段的重复数据

    1. 查询SQL表中某个字段的重复数据 SELECT user_name,COUNT(*) AS count FROM db_user_info GROUP BY user_name HAVING c ...

随机推荐

  1. bzoj 1090: [SCOI2003]字符串折叠【区间dp】

    设f[i][j]为区间(i,j)的最短长度,然后转移的话一个是f[i][j]=min(j-i+1,f[i][k]+f[k+1][j]),还有就是把(k+1,j)合并到(i,k)上,需要判断一下字符串相 ...

  2. PJzhang:左耳朵耗子-陈皓

    猫宁!!! 参考链接:https://coolshell.cn/haoel 左耳朵耗子原名陈皓,那个是他的网络ID,在我眼中是个值得尊敬的程序员,虽然我对他真人没什么了解. 这是他博客的自我介绍: 2 ...

  3. CentOS7下如何正确安装并启动Docker(图文详解)

    我使用了CentOS 7操作系统,可以非常容易地安装Docker环境.假设,下面我们都是用root用户进行操作,执行如下命令进行准备工作: yum install -y yum-utils yum-c ...

  4. ArrayList和LinkedList的共同点和区别

    ArrayList和LinkedList的相同点和不同点 共同点:都是单列集合中List接口的实现类.存取有序,有索引,可重复 不同点: 1.底层实现不同: ArrayList底层实现是数组,Link ...

  5. python中时间日期格式化符号的含义

    %y   两位数的年份表示(00-99) %Y 四位数的年份表示(000-9999) %m 月份(01-12) %d 月内中的一天(0-31) %H    24小时制小时数(0-23) %I   12 ...

  6. Python基础知识(2)

    1:if比较运算符.and.or >=:大于或者等于 <=:小于或者等于 ==:等于 !=:不等于  (<>:也是不等于,在Python2中可用.Python3中无法使用) a ...

  7. AdventureWorks2012.mdf的使用

    AdventureWorks2012.mdf的使用,在数据库管理器界面中,右击数据库,然后附加,然后选择好AdventureWorks2012.mdf,然后删掉log,然后确定即可.

  8. java webRoot 路径问题

    项目部署后的目录结构 src 生成到 WEB-INF\classes文件下; WebRoot  为项目的根目录,应用中“/action”就相当于是系统目录中的”WebRoot/action" ...

  9. html 文本溢出显示省略号 .....

  10. linux系统文件目录解析

    /bin 二进制可执行命令  /dev 设备文件(硬盘/光驱等)  /etc 系统管理和配置文件  /etc/rc.d 启动的配置文件和脚本  /home 用户主目录,下面会有以登录用户名作为文件夹名 ...