cte
首先了解一下什麼是 cte,全名 common table expressions
withcte1
as (select a, b from
table1),
cte2
as (select c, d from
table2)
select b, d from cte1 join
cte2
where cte1.a = cte2.c;
cte1, cte2 為我們定義的cte,可以在當前查詢中引用,可以看出 cte 就是乙個臨時結果集,和派生表類似
遞迴查詢
先來看下遞迴查詢的語法
with recursive cte_name as(select ... --
return initial row set
union
all/
union
distinct
select ... --
return additional row sets
)select
*from cte;
遞迴部分不能包括:
上面的講解可能有點抽象,通過例子慢慢來理解
with recursive cte (n) as--這裡定義的n相當於結果集的列名,也可在下面查詢中定義
(select
1union
allselect n +
1from cte where n <5)
select
*from
cte;
--result+--
----+
| n |+--
----+|1
||2|
|3||
4||5
|+------+
example
最後來看乙個樹結構的例子
createtable
`c_tree` (
`id`
int(11) not
null
auto_increment,
`cname`
varchar(255) collate utf8mb4_unicode_ci default
null
,`parent_id`
int(11) default
null
,primary
key(`id`)
) engine
=innodb auto_increment=
13default charset=utf8mb4 collate=
utf8mb4_unicode_ci;
mysql
>
select
*from
c_tree;+--
--+---------+-----------+
| id | cname | parent_id |+--
--+---------+-----------+|1
|1|0
||2|
2|0|
|3|3
|0||
4|1-
1|1|
|5|1
-2|1
||6|
2-1|
2||7
|2-2
|2||
8|3-
1|3|
|9|3
-1-1
|8||
10|3-
1-2|
8||11
|3-1
-1-1
|9||
12|3-
2|3|
+----+---------+-----------+
mysql>
with recursive tree_cte as
(select
*from c_tree where parent_id =
3union
allselect t.*
from c_tree t inner
join tree_cte tcte on t.parent_id =
tcte.id
)select
*from
tree_cte;+--
--+---------+-----------+
| id | cname | parent_id |+--
--+---------+-----------+|8
|3-1
|3||
12|3-
2|3|
|9|3
-1-1
|8||
10|3-
1-2|
8||11
|3-1
-1-1
|9|+
----+---------+-----------+
mysql8問題 mysql8中的問題
only full group by 對於group by聚合操作,如果在 select 中的列,沒有在 group by 現,那麼這個sql是不合法的,因為列不在group by從句中。no auto value on zero 該值影響自增長列的插入。預設設定下,插入0或null代表生成下乙個自...
mysql8建立不了使用者 mysql8建立使用者
假如是mysql8版本的話,使用 grant all privileges to 使用者 localhost identified by 自定義密碼 會報錯,因為要先建立使用者再進行賦權,不能同時進行 建立使用者 create user 使用者名稱 localhost identified by 密...
Linux下安裝mysql8的方法
cd usr local pkg 如 wget tar xvf mysql 8.0.17 linux glibc2.12 i686.tar.xz 解壓安裝包 此處,如果出現如下錯誤 tar child xz cannot exec no such file or directory tar chil...