以前、カスタム関数を使用して 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を使用したモバイルアプリケーションの構築プロセスの完全な記録
目次1. インデックスの基本1.1 はじめに1.2 インデックスの仕組み1.3 インデックスの種類1...
この記事では、例を使用して MySQL の重複インデックスと冗長インデックスについて説明します。ご参...
1.デバイス幅定義: 出力デバイスの画面表示幅を定義します。 Web ページが Safari で開か...
目次1 違い1.1 スペース占有1.2 表現範囲1.3 タイムゾーン2 テスト3つの選択肢MySQL...
1. libfastcommon-1.0.43 をインストールします。インストール パッケージは h...
目次1. オープンソースの倉庫管理ツール Harbor 2 インストール2.1 DockerとDoc...
問題の説明: phpstorm の SFTP ホストを 192.168.122.1 に設定すると、接...
目次1. React フックと純粋関数2. シンプルなmyUseState 3. myUseStat...
目次v-model 入力で双方向バインディングデータを使用するコンポーネント内の v-model他の...
目次例えば:一般的な執筆:要約する例えば:次に、データベースのUSERテーブルにUserオブジェクト...
この記事の例では、クールなフロントエンドページのスライド検証の具体的なコードを参考までに共有していま...
MySQL 自体はファイルシステムに基づいて開発されましたが、ロックの存在が異なります。データベース...
始める前に、これから紹介する JOIN タイプを示すために 2 つのテーブルを作成します。テーブルを...
目次1. 背景2. 検証プロセス3. 検証を作成する4. フロントエンドコード4.1 コアjsファイ...
目次1. 条件付きアクセス属性2. アロー関数の紹介1. 条件付きアクセス属性?. は ES2020...