mysql查询表中最小可用id值
今天在看实验室的项目时,碰到的一个问题,。先把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值的更多相关文章
- 最小可用id
题目:在非负数组(乱序)中找到最小的可分配的id(从1开始编号),数据量10000000. 题目解读:在一个不重复的乱序的自然数组中找到最小的缺失的那个数,比如1,2,3,6,4,5,8,11.那么最 ...
- Mysql 查询表中某字段的重复值,删除重复值保留id最小的数据
1 查询重复值 ); 2 删除重复值 -- 创建临时表 ) ); -- 把重复数据放进临时表 INSERT Hb_Student_a SELECT id,studentNumber FROM Hb_S ...
- MySQL 查询表中某字段值重复的数据
MySQL中,查询表(dat_bill_2018_11)中字段(product_id)值重复的记录: ; 说明:先用GROUP BY 对 product_id 进行分组,同时使用COUNT(*)进行统 ...
- 在弹框中获取foreach中遍历的id值,并传递给地址栏(方法2)
1.php有时候我们需要再弹框中获取foreach中遍历的数据(例如id),在弹框中点击按钮并传递给地址栏跳转.那么应该怎么做呢.第二种方法. 2. 可以在弹框中给出一个input hidden 点击 ...
- 在弹框中获取foreach中遍历的id值,并传递给地址栏。
1.php有时候我们需要再弹框中获取foreach中遍历的数据(例如id),在弹框中点击按钮并传递给地址栏跳转.那么应该怎么做呢. 2. 点击取现按钮,如果没有设置密码->弹框 3. 点击去设置 ...
- Java获取最后插入MySQL记录的自增ID值方法
方法一: String sql = "INSERT INTO users (username,password,email) VALUES (?,?,?);"; PreparedS ...
- MySql 查询表中字段的数据类型
[1]MySQL中查询某表中字段的数据类型 (1)DESC 表名: (2)DESCRIBE 表名: (3)SHOW COLUMNS FROM 表名: 应用示例: DESC cfg_acct_free_ ...
- Django ORM 查询表中某列字段值
场景: 有一个表中的某一列,你需要获取到这一列的所有值,你怎么操作? 解决办法: 有一个model为:Event 方式一: 获取内容: Event.objects.values('title') 输出 ...
- MySQL查询表中某个字段的重复数据
1. 查询SQL表中某个字段的重复数据 SELECT user_name,COUNT(*) AS count FROM db_user_info GROUP BY user_name HAVING c ...
随机推荐
- NOIp 2014飞扬的小鸟【dp】By cellur925
题目传送门 放在14年Day1T3的dp题目...应该比较看出来是dp算法吧,因为在本蒟蒻看来求最值的算法不清晰时就是dp了==. 状态还是比较好设计的,考虑到每个情况需要记录下的量:f[i][j]表 ...
- JavaScript中简单排序总结
JavaScript中简单排序总结 冒泡排序 经典排序算法, 双重for循环 在第二个for循环的时候, j < arr.len -1 -i , 这一步的优化很重要 function bullS ...
- import和from .xxx import *的一点重要区别
import zzz 不会导入zzz中已导入的模块 from .xxx import * 会导入xxx中已导入的模块 特别注意: 使用logging时,x模块导入了log.py,y模块导入了log.p ...
- Spring Boot学到的内容
Hello World:了解程序入口(创建启动类) Web程序:写Controller类(@RestController),写Controller方法(@GetMapping),maven依赖spri ...
- java的学习方向
在我身边有很多初学者,或者想入门的门外汉问我该如何的去学习一门新的技术,如果你是一窍不通的门外汉,我给你的建议是,报一个可靠的基础培训班.当然培训班的方向也分为很多,有前端的培训课程.有java的培训 ...
- js事件、Js中的for循环和事件的关系、this
一.js事件 1.事件 用户在网页中所触发的行为 鼠标滑动种类很多,键盘.表单特列: 点击:onclick 鼠标进入:onmouseenter 鼠标离开:onmouseleave 鼠标悬浮:onmo ...
- eclipse搭建android开发环境详细步骤
搭建android应用的开发环境,一套程序下来也是相当繁琐的,这里我整理下一整套详细流程: 1,下载JDK 去oracle官网下载最新版本的jdk,官网地址 http://www.oracle.com ...
- XSS漏洞扫描经验分享
关于XSS漏洞扫描,现成的工具有不少,例如paros.Acunetix等等,最近一个项目用扫描工具没有扫出漏洞,但还是被合作方找出了几个漏洞.对方找出的漏洞位置是一些通过javascript.ajax ...
- qt 设置阴影 不显示黑色边框
this->setAttribute(Qt::WA_TranslucentBackground);
- Dockerfile 中的 CMD和ENTRYPOINT 两兄弟
CMD 先说老大 CMD 当一个容器准备好运行之后,需要找一个指定命令来创建一个初始进程并运行. 一,/bin/sh -c 因为某种意义上一个Dockerfile其实可以理解是一个简化版bash 脚本 ...