MySql8 WITH RECURSIVE 再帰クエリ親子コレクションメソッド

MySql8 WITH RECURSIVE 再帰クエリ親子コレクションメソッド

背景

コメントに似た機能を開発する場合は、必要に応じてすべてのコメントのサブセットをクエリする必要があります。実装方法はデータベースによって異なります。この記事ではMySQLデータベースバージョン8.0を使用します。

  • START [Param] CONNECT BY PRIORはOracleデータベースで使用できます
  • MySQLではWITH RECURSIVEを使用する必要があります

必要

名前が Zhang San である子供と孫を検索します。pid は現在のレコードの親 ID です。たとえば、Zhang San の息子の pid は Zhang San の ID です。

ここに画像の説明を挿入

導入

1から100までの累積結果を計算します。
WITH RECURSIVE t(n) AS ( //t は結果テーブル、n はフィールドです。フィールドが指定されていないことを示すために、フィールドを 1 つだけ指定できます。VALUES (1) //再帰の開始。この時点で、t テーブル フィールド n にはレコードが 1 つしかないことがわかります。1
 ユニオンオール
  n+1 を t から選択する (n < 100)   
  /*ここでの結果は 2 です。この時点で、t テーブルのフィールド n には、それぞれ 1 と 2 の 2 つのレコードがあります。
  * 3
  * ...
  * 100
  */													  
)
SELECT sum(n) FROM t; //フィールドnの合計

父親は息子のために祈る

WITH RECURSIVE temp AS ( // 結果テーブルにtempという名前を付ける
	SELECT * FROM resource r WHERE r.name = '张三' //親IDのレコードをクエリします。この時点で、このレコードは図1-1に示すように、すでに一時テーブルに存在します。
	ユニオンオール
	/*この時点で、次のSQLは期待される結果の最後の2つのレコード(最初のレコードを除く)であることに注意してください。
	* where の後の条件に注意してください。一時テーブル内の唯一のレコードの ID を使用して、リソース テーブルの PID を関連付けます。
	*temp の 2 番目のレコード ID は、temp の最初のレコードがリソース テーブルの pid と一致しない場合にのみ一致します */
	SELECT r.* FROM resource r,temp t WHERE t.id = r.pid
)tempから*を選択

ここに画像の説明を挿入

息子が父親を調査

再帰的なtemp AS(
	SELECT * FROM resource r WHERE r.name = '张三孙子'
	ユニオンオール
	//サブセットであることがわかっているので、temp pid を通じてリソース ID を一致させる必要があります。
	SELECT r.* FROM resource r,temp t WHERE t.pid = r.id
)tempから*を選択

ここに画像の説明を挿入

これで、MySql8 で親子セットを再帰的にクエリする方法に関するこの記事は終了です。MySql8 で親子セットを再帰的にクエリする方法に関するより関連性の高いコンテンツについては、123WORDPRESS.COM で以前の記事を検索するか、次の関連記事を引き続き参照してください。今後も 123WORDPRESS.COM を応援していただければ幸いです。

以下もご興味があるかもしれません:
  • MySQL ビューの一貫性を確保する方法の詳細な説明 (チェック オプション付き)
  • MySQL のインストール時に「MySQL という名前の Windows サービスが既に存在します。」というエラーを解決する方法
  • 暗黙の DEFAULT 値を持つ TIMESTAMP は MySQL 5.6 で非推奨エラーとなる
  • CURRENT_TIMESTAMP を使用した MySQL エラー TIMESTAMP 列の解決方法
  • MySQL のヒント: PID ファイルを更新せずにサーバーが終了する問題の解決方法
  • MySQL による PHP SQL インジェクション
  • MySQL 8.0 WITH クエリの詳細

<<:  HTMLはWEB標準の開発の中心的な基盤です

>>:  Vue uniapp はセグメンター効果を実現します

推薦する

超シンプルな QPS 統計手法 (推奨)

過去 N 秒間の QPS 値の統計 (1 秒あたりの選択、挿入などを含む) mysql> se...

すべてのホストがmysqlにアクセスできるようにする方法

1. MySQLデータベースのユーザーテーブルのレコードのHostフィールド値を%に変更します。奇妙...

HTML フォーマットの json のサンプルコード

さっそく、コードを直接投稿します。具体的なコードは次のとおりです。 <!DOCTYPE htm...

H5でクリックされたときにaタグの背景色をキャンセルする方法

1. モバイル端末でクリックされたときにタグの青色を解除する { -webkit-tap-highl...

tomcat ログ ディレクトリ内のログ ファイルの分析 (概要)

tomcat が起動されるたびに、次のログ ファイルがログ ディレクトリに自動的に生成され、日付順...

ウェブページ作成時のHTMLタグの使用に注意してください

この記事では、Web ページの作成を学習するときに注意すべき HTML タグに関するいくつかの問題を...

JS 関数のアンチシェイクと関数スロットリングを理解する方法

目次概要1. 関数デバウンス2. 機能スロットリング(スロットル)概要関数アンチシェイクと関数スロッ...

MySQL ロック制御同時実行方法

目次序文1. 楽観的ロックバージョンフィールドを追加する2. 悲観的ロック読み取りロック完全なテーブ...

Vue プロジェクトにインターフェース リスニング マスクを追加する方法

1. 事業背景マスク レイヤーを使用してユーザーの異常な操作を遮断する方法は、フロントエンドでよく使...

Raspberry Pi msmtp と mutt のインストールと設定のチュートリアル

1. muttをインストールするsudo apt-get install mutt 2. msmtp...

MySQL トリガーの原理と使用例の分析

この記事では、例を使用して、MySQL トリガーの原理と使用方法を説明します。ご参考までに、詳細は以...

MySQL 5.1 のパスワードを変更し、MySQL データベースにリモートでログインする方法

mysql ユーザーを作成し、承認します。形式: 「ユーザー パスワード」で識別されるユーザー@ログ...

Vue Element フロントエンドアプリケーション開発のための従来の JS 処理機能

目次1. 従来のコレクションに対するフィルター、マップ、および削減処理方法2. 再帰処理3. for...

Linux アカウントのパスワードを変更する詳細な例

個人アカウントのパスワードを変更する一般ユーザーが個人アカウントのパスワードを変更する場合は、他のコ...

Vue における LocalStorage と SessionStorage の違いと使い方

目次LocalStorageとはSessionStorageとはLocalStorage と Ses...