以前、カスタム関数を使用して 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を使用したモバイルアプリケーションの構築プロセスの完全な記録
この記事の例では、衝突検出を実装するためのjsの具体的なコードを参考までに共有しています。具体的な内...
使用環境cmd モードで、mysql --version と入力します (インストールされている M...
MySQL 8.0.12 のダウンロードとインストールのチュートリアルを録画し、全員と共有しました。...
MacにMySQLデータベースをインストールし、環境変数を設定する手順を参考までに記録します。具体的...
接続ツールを開きます。私はMobaXterm_Personal_12.1を使用します(公式サイトのダ...
目次1 関数カリー化とは何ですか? 2 カレーの役割と特徴2.1 パラメータの再利用2.2 早期復帰...
Cockpit は、CentOS および RHEL システムで使用できる Web ベースのサーバー管...
広告を閉じるまでのカウントダウンを実装するために JavaScript を使用するまだフロントエンド...
目次序文1. 再帰コンポーネント2. 右クリックメニューコンポーネント要約する序文今日、プロジェクト...
JSONObject は単なるデータ構造であり、JSON 形式のデータ構造 ( key-value構...
以下のように表示されます。 SELECT prod_name,prod_price FROM pro...
生活の中で、インターネットはどこにでもあります。インターネットを通じてゲームをしたり、テレビ番組を見...
目次1. マップされた型2. マッピング修飾子3. キーの再マッピング4. さらなる探究序文: Ty...
<p><b>これは太字フォントです</b></p> ...
一般的には、左側にメニューがあった後、ページの上部に履歴タブ メニューを追加する必要があります。他の...