DELETE FROM 统计 WHERE
WHERE后面如何写才能删除“统计”表中第一行之外的所有行?
8 个解决方案
#1
DELETE FROM 统计 WHERE NOT IN (SELECT TOOP 1 id FROM 统计 )
SQL是弱项,不知行不行
SQL是弱项,不知行不行
#2
对于正规的关系数据库(不包括将近20年前的foxbase等简单数据库),实际上不可能有什么“第一行”的概念。数据库表中的数据都是按照数据块的方式管理的,也就是说那一块数据有空闲的空间那么新增数据就会插入这个数据块,同时如果哪一块数据块的所有空间都被释放掉那么它就被数据库放入空闲块列表管理起来准备下一次分配数据块时使用(因此你会看到关系数据库占用磁盘文件的大小只增不减)。
因此数据的排列时没有什么“第一、第二”的固定次序的。查询时你可以给个order by 语句来表示输出数据的次序,但是随后其它操作你就必须使用之前找到的数据的主键来唯一表示它,而不是什么“第一行、第二行”这种东西。这种东西并不存在。
#3
DELETE FROM 统计 WHERE ID > Min(ID)
SQL是弱项,不知行不行
SQL是弱项,不知行不行
#4
显然不行。你没有在where和not in之间写明id。而这个id,正是楼主所纠结的东西。
#5
不但漏掉了一个字段,还把TOP写成了TOOP
#6
假设你没有主键,那么首先为你的数据库表增加一个自增列作为主键。然后再写sql语句。
#7
要有排序才行,没有排序,第一行是不确定的。
delete from 表 where id<>(select min(id) from 表)
delete from 表 where id<>(select min(id) from 表)
#8
谢谢各位的指点,已经搞定。
#1
DELETE FROM 统计 WHERE NOT IN (SELECT TOOP 1 id FROM 统计 )
SQL是弱项,不知行不行
SQL是弱项,不知行不行
#2
对于正规的关系数据库(不包括将近20年前的foxbase等简单数据库),实际上不可能有什么“第一行”的概念。数据库表中的数据都是按照数据块的方式管理的,也就是说那一块数据有空闲的空间那么新增数据就会插入这个数据块,同时如果哪一块数据块的所有空间都被释放掉那么它就被数据库放入空闲块列表管理起来准备下一次分配数据块时使用(因此你会看到关系数据库占用磁盘文件的大小只增不减)。
因此数据的排列时没有什么“第一、第二”的固定次序的。查询时你可以给个order by 语句来表示输出数据的次序,但是随后其它操作你就必须使用之前找到的数据的主键来唯一表示它,而不是什么“第一行、第二行”这种东西。这种东西并不存在。
#3
DELETE FROM 统计 WHERE ID > Min(ID)
SQL是弱项,不知行不行
SQL是弱项,不知行不行
#4
显然不行。你没有在where和not in之间写明id。而这个id,正是楼主所纠结的东西。
#5
不但漏掉了一个字段,还把TOP写成了TOOP
#6
假设你没有主键,那么首先为你的数据库表增加一个自增列作为主键。然后再写sql语句。
#7
要有排序才行,没有排序,第一行是不确定的。
delete from 表 where id<>(select min(id) from 表)
delete from 表 where id<>(select min(id) from 表)
#8
谢谢各位的指点,已经搞定。