以前、カスタム関数を使用して MySQL でツリー構造を再帰的にクエリする方法についての記事を書きました。MySQL 8.0 以降、再帰クエリ構文がようやくサポートされるようになりました。 熱膨張係数 まず、CTEとは何かを理解しましょう。正式名称はCommon Table Expressionsです。 と cte1 AS (テーブル1からa、bを選択) cte2 AS (テーブル2からc、dを選択) cte1からb、dを選択し、cte2に結合します。 ここで cte1.a = cte2.c; cte1、cte2は定義したCTEであり、現在のクエリで参照できます。 CTE は派生テーブルに似た一時的な結果セットであることがわかります。両者の違いについてはここでは詳しく説明しません。MySQL 開発ドキュメントを参照してください: https://dev.mysql.com/doc/refman/8.0/en/with.html#common-table-expressions-recursive-examples 再帰クエリ まず、再帰クエリの構文を見てみましょう。 再帰的なcte_name AS ( SELECT ... -- 初期行セットを返す UNION ALL / UNION DISTINCT SELECT ... -- 追加の行セットを返す ) cteから*を選択します。
再帰部分には以下を含めることはできません。
上記の説明は少し抽象的かもしれませんので、例を通してゆっくり理解していきましょう。 WITH RECURSIVE cte (n) AS -- ここで定義されたnは結果セットの列名と同等であり、次のクエリでも定義できます( 選択1 ユニオンオール n + 1 をテーブルから選択する (n < 5) ) cteから*を選択します。 - 結果 +------+ | いいえ | +------+ | 1 | | 2 | | 3 | | 4 | | 5 | +------+
例 最後に、ツリー構造の例を見てみましょう。 テーブル `c_tree` を作成します ( `id` int(11) NOT NULL AUTO_INCREMENT, `cname` varchar(255) COLLATE utf8mb4_unicode_ci デフォルト NULL, `parent_id` int(11) デフォルト NULL, 主キー (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=13 デフォルト CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; mysql> c_tree から * を選択します。 +----+---------+-----------+ | id | cname | 親 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 | +----+---------+-----------+ マイSQL> RECURSIVE tree_cte として ( parent_id = 3 の c_tree から * を選択 ユニオンオール c_tree t から t.* を選択し、tree_cte tcte を t.parent_id = tcte.id で内部結合します。 ) tree_cte から * を選択します。 +----+---------+-----------+ | id | cname | 親 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 | +----+---------+-----------+
詳細情報 https://dev.mysql.com/doc/refman/8.0/en/with.html 以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。 以下もご興味があるかもしれません:
|
<<: Windows Server 2019 IIS10.0+PHP(FastCGI)+MySQL 環境構築チュートリアル
>>: Vue Nativeを使用したモバイルアプリケーションの構築プロセスの完全な記録
MySQL 5.x と MySQL 8.0.X のいくつかの違いapplication.proper...
esインストール docker pull elasticsearch:7.4.0 # -d : バッ...
1. 概要ユーザーは、アクセスする Web アプリケーションがインタラクティブでスムーズに実行される...
以下は、CentOS 6 または CentOS 7 サーバーのディスク領域をクリアするための簡単なコ...
この記事では、MySQL インストールの詳細なチュートリアルを記録し、全員と共有します。 1. バー...
Linux で Go 環境を構築するのは非常に簡単です。 1. go1.2.1.linux-386....
CHAR 型と VARCHAR 型は似ていますが、主に格納場所、末尾のスペース、取得方法が異なります...
1. スタイルオブジェクトスタイル オブジェクトは単一のスタイル宣言を表し、スタイルが適用されている...
高可用性 Web クラスターを実現する Keepalived+Nginx+Tomcat 1. Ngi...
目次1. 変数の概要1.1 変数のメモリへの保存1.2 変数の使用1. 変数を宣言する2. 譲渡3....
例えば:コードをコピーコードは次のとおりです。 <input type="check...
ウェブサイトのナビゲーションを設計することは、家の基礎を築くようなものです。基礎がしっかりしていなけ...
MySQL 8 の新機能: MySQL をバージョン 5.x から 8.x に直接アップグレードする...
目次1. HTMLタグ要素にCSSスタイルを直接埋め込む2. HTMLのheadセクションにおけるス...
目次1. デカルト積現象2. 接続クエリの知識ポイントのまとめ1) 結合クエリとは何ですか? 2) ...