mysql有cte嗎 MySQL8 以上的 CTE

2021-10-17 22:32:54 字數 1730 閱讀 6818

cte 公用表表示式(通用表表示式)

common table expression 簡稱cte

先放操作

# 使用的資料表和資料(測試) 使用的mysql8.0.16

create table `menu` (

`id` int(10) unsigned not null auto_increment comment '選單id',

`menu_name` varchar(32) character set utf8mb4 collate utf8mb4_general_ci not null default '' comment '選單名稱',

`pid` int(10) unsigned not null default '0' comment '上級id',

primary key (`id`)

) engine=innodb auto_increment=4 default charset=utf8mb4 collate=utf8mb4_general_ci comment='選單表';

insert into `menu` values ('1', '一級選單', '0');

insert into `menu` values ('2', '二級選單', '1');

insert into `menu` values ('3', '**選單', '2');

# 操作起來 (關鍵字沒有大小寫,看不慣的自己美化下)

# 獲取 一級選單 的所有下級選單id

# 之前需要**中遞迴,這裡直接在sql語句處理 好不好用了才知道 效率說句話沒有怎麼測試

# 這裡也使用的是 遞迴,mysql cte的遞迴with recursive r as(select id from menu where id=1

union all

select m.id from menu as m, r where r.id =m.pid)

select id from r;

結果如下

| id |

| 1 |

| 2 |

| 3 |

既然可以獲取下級的,那能不能獲取上級的,答案是肯定

# 獲取 **選單的所有上級

with recursive r as (

select pid from menu where id = 3

union all

select m.pid from menu as m

,r where r.pid = m.id

) select pid from r where pid!=0;

#結果如下

| pid |

| 2 |

| 1 |

上面使用的就是 mysql8版本之後的 cte

公用表表示式是乙個命名的臨時結果集,僅在單個sql語句(例如select、insert、delete和update)的執行範圍內存在。

cte分為遞迴cte和非遞迴cte。

【cte的語法格式】

cte的主要思想就先生成臨時結果集,以方便後面的使用;與臨時表不同的是這個結果集的作用域不是當前session而是當前語句,對!不是session級是語句級別的

with_clause:with [recursive]cte_name[(col_name [, col_name] ...)] as(subquery)[, cte_name [(col_name [, col_name] ...)] as (subquery)] ...

mysql有top嗎 mysql有top查詢嗎

用慣了access mssql server的朋友,可能在用mysql查詢前n條記錄時,習慣的使用select top n 形式的語句,在這裡說明一下,mysql沒有此語法,mysql用limit來實現相關功能,而且功能更加強大,good。以下是limit在mysql中的使用詳解 語法 select...

mysql有top嗎 mysql有top查詢嗎

在mysql中沒有top查詢,但是可以使用limit限制查詢來實現相同的效果,語法為 select from table limit offset,rows rows offset offset 用慣了access mssql server的朋友,可能在用mysql查詢前n條記錄時,習慣的使用sel...

mysql有必要公升級8嗎

mysql有必要公升級到第8版本,相較於之前的版本,mysql8增加多種新特性,同時也提高了軟體各方面的速度。除此之外,mysql8還增加了開窗函式,可以讓使用者獲得更好的使用體驗。mysql有必要公升級到第8版本,相較於之前的版本,mysql8增加多種新特性,同時也提高了軟體各方面的速度。除此之外...