SQL语句复制父子级表数据

原始表Book数据如下: id为自增长整数,text为内容,pid为上级ID
id text pid
1 第一层 0
2 数学 0
3 第二层 1
4 语文 1
5 第三层 3
6 英语 3
……………………

现要求拷贝一份这样的数据到同一个表Book中,成功后的数据应该如下
id text pid
100 第一层 0
101 数学 0
102 第二层 100
103 语文 100
104 第三层 102
105 英语 102

……………………

--第一步:复制全部数据
Insert Into Book(text,pid) Select a.text,a.pid From Book a where 条件

--第二步:创建变量表
declare @t table(idx int,id int,pid int,id2 int,pid2 int)
Insert Into @t
select ROW_NUMBER() OVER (ORDER BY a.pid) AS idx,a.id,a.pid,b.id id2,b.pid pid2
from Book a inner join Book b on b.text=a.text and b.pid=a.pid where 条件

--第三步:修改新数据的pid
update Book set pid=c.id2
from @t a
inner join @t b on b.pid=a.id
inner join @t c on c.idx=a.idx
时间: 2024-12-04 17:06:52

SQL语句复制父子级表数据的相关文章

使用sql语句复制一张表

如何使用sql语句复制一张表? 第一步:先建一张新表,新表的结构与老表相等. create table newbiao like chengjibiao(老表名); 第二步:将老表中的值复制到新标中. insert into newbiao SELECT * from chengjibiao(老表名);

使用SQL语句清空数据库所有表的数据

近来发现数据库过大,空间不足,因此打算将数据库的数据进行全面的清理,但表非常多,一张一张的清空,实在麻烦,因此就想利用SQL语句一次清空所有数据.找到了三种方法进行清空.使用的数据库为MS SQL SERVER.1.搜索出所有表名,构造为一条SQL语句 declare @trun_name varchar(8000)set @trun_name='' select @trun_name=@trun_name + 'truncate table ' + [name] + ' ' from syso

sql 语句 获取某张表某列字段最短的某几行数据

sql 语句 获取某张表某列字段最短的某几行数据 SELECT C_name,C_code FROM Catalog where LEN(C_code)=LEN((SELECT top 1 C_code FROM Catalog order By LEN(C_code))) 原文地址:https://www.cnblogs.com/woniucode/p/10455406.html

sql语句查询后几行数据并倒着排列

$conn = mysql_connect("数据库地址","用户名","密码"); if(!$conn) { die("mysql conn failed"); } else{ mysql_query("SET NAMES 'utf8'"); mysql_select_db("数据表",$conn); if(!$conn) { die("database selected f

清空SQL Server数据库中所有表数据的方法

其实删除数据库中数据的方法并不复杂,为什么我还要多此一举呢,一是我这里介绍的是删除数据库的所有数据,因为数据之间可能形成相互约束关系,删除操作可能陷入死循环,二是这里使用了微软未正式公开的sp_MSForEachTable存储过程. 也许很多读者朋友都经历过这样的事情:要在开发数据库基础上清理一个空库,但由于对数据库结构缺乏整体了解,在删除一个表的记录时,删除不了,因为可能有外键约束,一个常见的数据库结构是一个主表,一个子表,这种情况下一般都得先删除子表记录,再删除主表记录. 说道删除数据记录,

正则表达式匹配SQL语句中的所有表名

折磨了几个小时,写出匹配SQL语句中的所有表名,备忘记录 1 \*\s+from\s+[\w\[\]]*\.?[\w\[\]]*\.?\[?(\b\w+)\]?[\r\n\s]* 支持各种表达式 SELECT * FROM Config SELECT * FROM [dbo].IMEIUser SELECT * FROM dbo.LotteryLog SELECT * FROM [GreenPrize]SELECT * FROM [dbo].[Config]SELECT * FROM dbo.[

PL/SQL Developer中表结构、表数据的导出和导入

导出表结构: Tools(工具)-->Export User Objects(导出用户对象) -->选择要导出的表(包括Sequence等)-->.sql文件,导出的都为sql文件 导出表数据: Tools(工具)-->Export Tables(导出表)-->选择表,选择SQL Inserts(SQL 插入)-->.sql文件 导入表结构: 执行刚刚导出的sql文件,记住要删掉table前的用户名,比如以前这表名为sys.tablename,必须删除sys 导入表数据

ORACLE基本SQL语句-用户及建表篇

一.用户相关SQL语句 /*新建用户*/create user SA identified by 2013; 说明:SA用户名,2013密码 /*授权connect,resource给用户sa*/grant connect,resource to sa; 说明:CONNECT角色: --是授予最终用户的典型权利,最基本的 . ESOURCE 角色: --是授予开发人员的 /*查询所有的用户*/select * from all_users; /*将表STU查询权限授予SA*/GRANT SELE

SQL Server迁移本机表数据信息

SQL Server将本机表数据信息通过媒介迁移到另外机器上 由于sql 只支持库的分离和附加  引用:https://blog.csdn.net/baicp3/article/details/46622293,并且通过导入导出的形式,insert的语法,少量数据还好,SQL server100万以上的数据就会出现及其慢的情况 所以本人采用转成包括表结构与数据的sql文件,在另一台机器上通过媒介进行数据覆盖传输:暂时对大数据量的迁移没啥好办法(如果有,拜托留下链接). 分享支援  造福人间 原文