Mysql查询表中最小可用id值的方法
今天在看实验室的项目时,碰到了一个让我“棘手”的问题,其实也是自己太笨了。先把sql语句扔出来
//这条语句在id没有1时,不能得到正确的查询结果。 selectmin(id+1)fromoslistcwherenotexists(selectidfromoslistwhereid=c.id+1);
刚开始看到这条查询语句,完全是一脸懵X的状态,可能也是好久没碰sql了。
1exists语法
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)中值最小的那个,然后返回结果。
结束查询。
ps:MySQL中删除id为最小的数据
//方法1 deletefrom表名whereidin(selectidfrom(selectmin(id)idfrom表名c1)t1); //方法2 deletefrom表名orderbyidasclimit1;
总结
以上所述是小编给大家介绍的Mysql查询表中最小可用id值的方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对毛票票网站的支持!