MySQL8 の新機能 - 共通式 (CTE)

MySQL8.0ではCommon Table Expression(CTE)(共通テーブル式)、つまりWITH句のサポートを開始しました。

簡単に始められます:

次の SQL は、再帰呼び出しに似た単純な CTE 式です。この SQL では、最初に select 1 を実行し、次にクエリ結果を取得し、値 n を送信して cte から n+1 を選択します (n <10、union all の下)。次にこのようにして、次の Union all の SQL ステートメントを再帰的に呼び出します。

WITH recursive cte(n) as 
( select 1
  union ALL
  select n+1 from cte where n<10
)
select * from cte;

事例紹介:

スタッフ テーブルには、id、name、および対応する上位 ID である m_id が含まれます。データは次のとおりです。

各従業員の上司部下関係を知りたい場合は、次のような方法が考えられます。

再帰的 CTE:

with recursive staff_view(id,name,m_id) as
(select id ,name ,cast(id as char(200)) 
 from staff where m_id =0
 union ALL 
 select s2.id ,s2.name,concat(s1.m_id,'-',s2.id)
 from staff_view as s1 join  staff as s2
 on s1.id = s2.m_id
)
select * from staff_view order by id

一般的なテーブル式を使用する利点は、上位レベルと下位レベルに 4、5、6、またはそれ以上のレイヤーがある場合でも、それらを横断するのに役立ち、SQL ステートメントの古い記述方法を調整する必要があることです。

要約:

共通テーブル式は、ステートメント レベルの一時テーブルやビューなどの派生テーブルに似ています。CTE はクエリ内で複数回参照したり、他の CTE を参照したり、再帰的に参照したりできます。CTE は、SELECT/INSERT/UPDATE/DELETE などのステートメントをサポートします。

おすすめ

転載: blog.csdn.net/m0_70299172/article/details/130496370