首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

使用递归CTE与INSERT SELECT一起使用MariaDB生成表数据

递归CTE(Common Table Expression)是一种在关系型数据库中使用递归查询的方法。它允许我们使用递归的方式查询表中的数据,并且可以与INSERT SELECT语句一起使用来生成表数据。

在MariaDB中,使用递归CTE与INSERT SELECT一起使用可以通过以下步骤来生成表数据:

  1. 创建一个临时表或者永久表,用于存储生成的数据。
  2. 使用WITH RECURSIVE关键字定义递归CTE,指定初始查询结果集。
  3. 在递归CTE中使用UNION ALL操作符连接递归查询的结果集。
  4. 在递归查询中,使用SELECT语句从已生成的数据中查询并生成新的数据。
  5. 使用INSERT INTO语句将递归CTE查询的结果插入到目标表中。

下面是一个示例,演示如何使用递归CTE与INSERT SELECT一起使用来生成表数据:

代码语言:txt
复制
-- 创建目标表
CREATE TABLE my_table (
  id INT,
  name VARCHAR(50)
);

-- 使用递归CTE与INSERT SELECT生成表数据
WITH RECURSIVE cte AS (
  SELECT 1 AS id, 'John' AS name
  UNION ALL
  SELECT id + 1, CONCAT('User ', id + 1)
  FROM cte
  WHERE id < 10
)
INSERT INTO my_table (id, name)
SELECT id, name
FROM cte;

-- 查询生成的表数据
SELECT * FROM my_table;

在上面的示例中,我们创建了一个名为my_table的表,包含id和name两列。然后使用递归CTE生成了10条数据,其中初始查询结果集是id为1和name为'John'的一条记录,然后通过递归查询生成了剩余的9条记录。最后,使用INSERT INTO语句将递归CTE查询的结果插入到my_table表中,并通过SELECT语句验证生成的表数据。

递归CTE与INSERT SELECT一起使用可以方便地生成表数据,特别适用于需要按照一定规则生成大量数据的场景,如测试数据生成、模拟数据生成等。

腾讯云提供了MariaDB数据库服务,您可以通过腾讯云数据库MariaDB官方文档了解更多关于MariaDB的使用和相关产品信息:腾讯云数据库MariaDB

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

【SQL揭秘】有多少种数据库,就有多少类CTE

Common Table Expression Common table expression简称CTE,由SQL:1999标准引入,可以认为是在单个 SELECTINSERT、UPDATE、DELETE...CTE 派生类似,具体表现在不存储为对象,并且只在查询期间有效。派生的不同之处在于,CTE 可自引用,还可在同一查询中引用多次。...CTE使用 CTE使语句更加简洁 例如以下两个语句表达的是同一语义,使用CTE比未使用CTE的嵌套查询更简洁明了。 1) 使用嵌套子查询 ? 2) 使用CTE ? CTE 可以进行树形查询 ?...“MATERIALIZE”告诉优化器产生一个全局的临时保存结果,多次引用CTE时直接访问临时即可。而”INLINE”则表示每次需要解析查询CTE。...MariaDB MariaDB从10.2开始支持CTE。10.2.1 支持non-recursive CTE, 10.2.2开始支持recursive CTE。 目前的GA的版本是10.1.

2.8K70

SQLServer CTE 递归查询

) -- Statement using the CTE SELECT * FROM cte_name   第一个查询为定点成员:定点成员只是一个返回有效的查询,用于递归的基础或定位点。   ...所谓迭代,是指每一次递归都要调用上一次查询的结果集,Union ALL是指每次都把结果集并在一起。   ...* FROM dbo.hierarchy ORDER BY ParentID; 3,实现由父级向子级的查询   由于实际的数据可能有很多,所以,要想获取河南省下的所有市,县,乡,村等信息,必须使用递归查询...union all select 3,7,20 union all select 4,8,30 ) --使用cte递归求出每个节点的路径 ,t(id,f_id,"name","level",...六、实例五 — 地区层级   数据准备: /* test ID 地区ID Name 地区名称 Main_ID 地区所属上级ID Sign 地区等级 例如:福建-

1.6K20

SQLServer中的CTE通用表表达式

这些聚合数据可能会将 Customers、Orders 和 Order Details 联接在一起,以计算订单的总和以及平均值。此外,您可能想要查询聚合的行集。...要创建派生,在由括号包围的 FROM 子句中移动 SELECT 语句即可。接着就能像或视图一样查询或者联接它。图 2 中的代码解决的查询图 1 所解决的相同,但使用的是派生而不是视图。...当需要多次引用同一行集时,这非常有用;引用 CTE 两次比复制该查询要简单得多。   CTE 并不一定由 SELECT 语句使用;任何引用 CTE生成行集的语句都可使用它。...这意味着 CTE 后面可以跟随使用 CTESELECTINSERT、UPDATE 或 DELETE 语句。您也可以在使用 CTE 的查询中使用只进和快照光标。...第二个查询定义,即递归成员,定义了一个返回定位点成员相同的列和数据类型的查询。递归成员还检索接下来将被用于递归回调到 CTE 的值。查询的结果通过 UNION 语句结合在一起

3.8K10

SQL递归实现循环判断

SQL递归实现循环判断 以前的文章Python小案例(五)循环判断进行分组介绍了如何使用python解决循环判断的问题。现在重新回顾一下这个问题背景:有一列按照某规则排序后的产品,想打包进行组合售卖。...递归查询是通过CTE(表表达式)来实现,至少包含两个查询,第一个查询为定点成员,定点成员只是一个返回有效的查询,用于递归的基础或定位点;第二个查询被称为递归成员,使该查询称为递归成员的是对CTE名称的递归引用是触发...且有高版本 SQL OnLine[4] SQLite、MariaDB、PostgreSQL、SQL Server 颜值高 Oracle Live SQL[5] Oracle 需要注册 简单的SQL递归案例...案例一:SQL递归查询部门架构 co l desc sample id 部门ID 1 pid 上级部门ID 0 name 部门名称 总部 如上,有一张存储部门架构的信息department,目前不知道具体有多少层级关系...,1 as next_n union all select st+1 as st -- 利用初始值生成自增id

2.5K20

T-SQL—理解CTEs

再本篇中,我们将看到如何定义和使用CTE。 定义和使用CTE 通过使用CTE你能写和命名一个T-SQL select 语句,然后引用这个命名的语句就像使用一个或者试图一样。...当然也有多重的递归查询定义,每一个递归查询定义一定UNION ALL联合使用。UNION ALL 操作符被用来连接最后的锚查询第一个递归查询。接下来我们用实际立在来讨论一下CTE递归CTE。...子查询被当做一个派生 MonthlyProductSales,查询按照根据ModifiedDate的月和年粒度进行汇总,将LineTotal 金额加在一起。...最后我使用Select语句引用第二个CTECTE递归调用CTE实例 另一个CTE的主要功能就是调用自己,当用CTE调用自己的时候,就行程了CTE递归调用。...为了更好地理解递归CTE,我将创建一个实例数据通过使用递归CTE, 下面就是代码Listing 6: USE tempdb; GO -- 先创建一个用户 CREATE TABLE dbo.Employee

1.9K90

T-SQL—理解CTEs

再本篇中,我们将看到如何定义和使用CTE。 定义和使用CTE 通过使用CTE你能写和命名一个T-SQL select 语句,然后引用这个命名的语句就像使用一个或者试图一样。...当然也有多重的递归查询定义,每一个递归查询定义一定UNION ALL联合使用。UNION ALL 操作符被用来连接最后的锚查询第一个递归查询。接下来我们用实际立在来讨论一下CTE递归CTE。...子查询被当做一个派生 MonthlyProductSales,查询按照根据ModifiedDate的月和年粒度进行汇总,将LineTotal 金额加在一起。...最后我使用Select语句引用第二个CTECTE递归调用CTE实例 另一个CTE的主要功能就是调用自己,当用CTE调用自己的时候,就行程了CTE递归调用。...为了更好地理解递归CTE,我将创建一个实例数据通过使用递归CTE, 下面就是代码Listing 6: USE tempdb; GO — 先创建一个用户 CREATE TABLE dbo.Employee

1.4K10

快速生成数字辅助

数字辅助只有一个整数列,包含从1到N个整数序列值,N通常很大。对MySQL来讲,数字辅助是一个强大的工具,编写SQL语句时经常用数据数字辅助做笛卡尔积来创建额外的行。...循环开始前先插入 1 条数据,然后当 s 小于等于所要生成数据行数时执行循环。在每次迭代中,该过程把nums当前所有行的值加上 s 后再插nums中。...方法三:一次生成 set session cte_max_recursion_depth=1000000; insert into nums with recursive temp (n) as (select...(Common Table Expressions)功能,用递归一次性生成所有数据,只需要不到13秒,性能进一步提高了四分之一。...: 0 Warnings: 0 CTE可以实现类似Oracle中connect by的递归功能,但功能更强大,能够解决非常复杂的查询问题。

83960

MySQL8功能详解——Common table expression (CTE)

Common table expression (CTE)通用表表达式是MySQL8推出的新功能。它是一种临时使用“WITH”命令,可以执行递归查询。...先看一下如何使用WITH语句: WITH cte1 AS (SELECT a, b FROM table1), cte2 AS (SELECT c, d FROM table2) SELECT...例如: WITH d1 AS(SELECT … FROM …), d2 AS (SELECT … FROM d1 …) SELECT FROM d1, d2 … 此外,CTE可以引用自身来定义递归...递归CTE常见于生成序列,层次或树状结构的遍历。...使用CTE,除了上述的好处之外,还会带来性能的提升。原因在于,如果使用派生进行多次参照,将会多次物化相同的。更多的空间,更多的时间,更长的锁等等会引起性能问题,类似于视图引用。

99510

SQL中 WITH AS 的使用方法

由于变量实际上使用了临时,从而增加了额外的I/O开销,因此,变量的方式并不太适合数据量大且频繁查询的情况。...where CountryRegionCode in (select * from cte) 其中cte是一个公用表表达式,该表达式在使用变量类似,只是SQL Server 2005在处理公用表表达式的方式上有所不同...在使用CTE时应注意如下几点: 1. CTE后面必须直接跟使用CTE的SQL语句(如selectinsert、update等),否则,CTE将失效。...如果CTE的表达式名称某个数据或视图重名,则紧跟在该CTE后面的SQL语句使用的仍然是CTE,当然,后面的SQL语句使用的就是数据或视图了,如下面的SQL语句所示: -- table1是一个实际存在的...select * from table1 -- 使用了名为table1的数据 4.

9510

SQL高级知识:递归查询

至少包含两个查询: 第一个查询为定点成员,定点成员只是一个返回有效的查询,用于递归的基础或定位点; 第二个查询被称为递归成员,使该查询称为递归成员的是对CTE名称的递归引用是触发。...递归查询的优点 效率高,大量数据集下,速度比程序的查询快。 递归的常见形式 WITH CTE AS ( SELECT column1,column2......FROM tablename INNER JOIN CTE ON conditions ) 递归查询示例 创建测试数据,有一个员工Employee,ManagerID是UserID的父节点,这是一个非常简单的层次结构模型...ALL SELECT 121,12,N'C1' 查询一下Employee表里的数据 查询每个User的的直接上级Manager WITH CTE AS( SELECT UserID,ManagerID...所谓迭代,是指每一次递归都要调用上一次查询的结果集,UNION ALL是指每次都把结果集并在一起

9510

MySQL 8.0 新增SQL语法对窗口函数和CTE的支持

NTILE(N) 将数据按照某些排序分成N组   举个简单的例子,按照分数线的倒序排列,将学生成绩分成上中下3组,可以得到哪个程序数据上中下三个组中哪一部分,就可以使用NTILE(3) 来实现。...如下还是使用上面的,按照时间将user_no = 'u0002'的订单按照时间的纬度,划分为3组,看每一行数据数据哪一组。...公用表表达式   CTE有两种用法,非递归CTE递归CTE。   ...另外一种是递归CTE递归的话,应用的场景也比较多,比如查询大部门下的子部门,每一个子部门下面的子部门等等,就需要使用递归的方式。   ...这里不做细节演示,仅演示一种递归的用法,用递归的方式生成连续日期。   当然递归不会无限下去,不同的数据库有不同的递归限制,MySQL 8.0中默认限制的最大递归次数是1000。

2.1K20

SQL中的递归查询

至少包含两个查询,第一个查询为定点成员,定点成员只是一个返回有效的查询,用于递归的基础或定位点;第二个查询被称为递归成员,使该查询称为递归成员的是对CTE名称的递归引用是触发。...是指递归次数上限的方法是使用MAXRECURION。 递归查询的优点 效率高,大量数据集下,速度比程序的查询快。...递归的常见形式 WITH CTE AS ( SELECT column1,column2......FROM tablename INNER JOIN CTE ON conditions ) 递归查询示例 创建测试数据,有一个员工Company,父级ID是部门ID的父节点,这是一个非常简单的层次结构模型...所谓迭代,是指每一次递归都要调用上一次查询的结果集,UNION ALL是指每次都把结果集并在一起

15210

MySQL 8.0从入门到精通

创建角色并授予用户角色权限 考虑如下几种场景: 应用程序使用名为app_db的数据库 。 应用程序相关联,可以为创建和维护应用程序的开发人员以及管理员账户。 开发人员需要完全访问数据库。...-- recursive member that references to the CTE name ) SELECT * FROM cte_name; SQL递归CTE由三个主要部分组成: 形成CTE...递归查询部分是引用CTE名称的查询,因此称为递归成员。递归成员由一个UNION ALL或UNION DISTINCT运算符锚成员相连 终止条件是当递归成员没有返回任何行时,确保递归停止。...简单的MySQL递归CTE示例请参阅以下简单的递归CTE 示例: WITH RECURSIVE cte_count (n) AS ( SELECT 1 UNION ALL...以下查询 SELECT n + 1 FROM cte_count WHERE n < 3 是递归成员,因为它引用了cte_count的CTE名称。递归成员中的表达式<3是终止条件。

1.1K20

【SQL】分享值函数FMakeRows,用于生成

RowNo+Lv*2,Lv*2 FROM cte WHERE RowNo+Lv*2<=@num ) SELECT RowNo FROM cte ) 功能一样,原理是递归倍增,语句变少了,但性能比不上原文的方法...,16384行上述方法要400ms左右,逐行法差不多,而原文方法只要140ms,所以算不上好方法,权当学习一下CTE递归知识。...使用示例: ? 至于该函数具体可以应用到哪些场景,只可意会,需要的人自然觉得有用,觉得没用的说明不需要。...no *= 2 END INSERT @t SELECT TOP (@num-@no) RowNo+@no FROM @t RETURN END 实现说明:原理是先给@t塞一个初始行,完了循环insert...也想过从某个必定存在的系统/视图获取行,如sys.objects,但这样会访问基础,即使你根本不select它的任何字段,这样性能必然不如纯内存操作来的好,试都不用试。

58330

根据上一行填充本行的空白栏位,SQL处理方式

为了方便说明,我举了一个简单的例子,假设一个学生成,有字段“学生ID”和“成绩”,学生ID是主键,自增,成绩只有NULL和1,2,3,4,5这几个值。...首先我们先建立示例: 1 create table t1  2 (  3 ID int identity primary key,  4 Score int null  5 );  6 insert ...要在SQL中使用递归,那么第一个应该想到的就是公用表表达式CTE。...那么简单的办法就是使用开窗函数给每一行数据增加一列连续自增的列,SQL Server中的函数是ROW_NUMBER().这样就变成了两个CTE嵌套使用,请看代码: 1 with t1new  2 as... * 20 from t 21 order by ID 公用表表达式真的很强大,另外在使用View出Report的时候,也可以用CTE,因为在View中不能用临时,所以使用CTE代替临时是个不错的解决方案

46030

SQL递归查询知多少

数据库中保存的流程数据是树形结构的,结构及数据如下图: 仔细观察结构,会发现其树形结构的特点: FFIRSTNODE:标记是否为根节点 FSTABLENAME:标记来源单据名称 FSID:标记来源单据分录...一、SqlServer 递归查询 1、基本概念 公用表表达式 (CTE) 可以认为是在单个 SELECTINSERT、UPDATE、DELETE 或 CREATE VIEW 语句的执行范围内定义的临时结果集...在不需要常规使用视图时替换视图,也就是说,不必将定义存储在元数据中。 启用按从标量嵌套 select 语句派生的列进行分组,或者按不确定性函数或有外部访问的函数进行分组。...在同一语句中多次引用生成。...其中在公用TEST_CTE进行关联时,我指定了两个条件CTBIE.FSID=CTE.FTID AND CTBIE.FSTABLENAME = CTE.FTTABLENAME,因为不同类型的单据各有一套自增的

4.4K80

SQL优化技巧--远程连接对象引起的CTE性能问题

,然后使用CTE,然后本地查询远程对象的CTE进行了left join 。...注意: 首先,远程查询使用的是CTE的表达式,我对CTE的理解有以下几点: 1.一次性视图(ADHoc View)。即必须后面跟着相应的selectinsert、update等,只能用一次。...可以对比一下变量cte倒是不同的特点: tempdb中实际存在的 能索引 有约束 在当前连接中存在,退出后自动删除。 有由引擎生成数据统计。...4.多次查询数据。 5.需要优化相关子查询。 这些时候使用临时甚至变量将会带来性能的提升。具体我就不在这里细说了有兴趣可以一起讨论下。...当然我们这里需要着重说明,CTE本身在性能优化上还是有很大作用的,尤其对于递归查询和内置函数的使用时都极大的较少了IO。 我猜想CTE内部原理应该游标相似,但是极大的简化了性能,也许是优化器的功劳。

1.4K70

记录下关于SQL Server的东西

CTE之所以与其他表表达式不同,是因为它支持递归查询: 定义一个递归CTE,至少需要两个查询(或者更多),第一个查询称为定位点成员(anchor member),第二个查询称为递归成员(recursive... member),基本格式如下: 定位点成员只是返回有效关系结果的查询,用于非递归查询类似,定位点成员查询只被执行一次。...递归成员是一个引用了CTE名称的查询,对CTE名称的引用表示查询在一个执行序列中逻辑上的“前一个结果集”,第一次调用递归成员时,它表示的就是定位点成员的查询结果,之后调用递归时,引用CTE则代表前一次调用所返回的结果集...它对某个源或者表表达式进行操作、透视数据,再返回一个结果。...select * from cte_order pivot(sum (qty) for custid in(A,B,C,D)) as newtable SQL Server 2008引入了merge语句

1.3K10
领券