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 はセグメンター効果を実現します

推薦する

純粋な CSS カスタム複数行省略記号の問題 (原理から実装まで)

テキストオーバーフローを表示するにはどうすればいいですか? どのようなニーズがありますか?単一行です...

インタビューの質問: ホーリー グレイル レイアウトとダブル ウィング レイアウトの違い

序文今日は、聖杯レイアウトとダブルウィングレイアウト、そしてそれらの違いについてお話しします。この2...

MySQL における引用符とバックティックの違いと使い方の詳細な説明

序文そこでこのブログを書きました。このブログでは大物の記事からいくつかの知識も推奨しています。侵害が...

Vueプロジェクトでvuexを使用する方法

目次Vuex とは何ですか? Vuex 使用サイクル図私のストアディレクトリvuexの例の実装要約す...

Mysql varchar型の合計操作例

友人の中には、データベースについて学習しているときに、テーブル構造を作成するときに誤ってフィールドを...

Mac での MySQL と Squel Pro の設定

Node.js の人気に応えて、最近、いくつかのサーバー側機能を実装するために Node.js を使...

JSデータ型検出のさまざまな方法の概要

目次背景データ型を決定する方法は何ですか? 1. typeof を使用して基本データ型を決定します。...

テーブルを開く際のMySQLスレッドの問題の解決方法

問題の説明最近、MySQL5.6.21サーバーがありました。アプリケーションがリリースされた後、同時...

HTML 基本要約推奨事項 (タイトル)

HTML: タイトル見出しは <h1> - <h6> などのタグによって定...

React-vscode で jsx 構文を使用する際の問題と解決策

問題の説明プラグインをインストールした後、ES7 React/Redux/GraphQL/React...

Docker イメージのデフォルトの保存場所を変更する方法 (ソリューション)

システムの初期のパーティション分割により、オペレーティング システム内の対応する / パーティション...

Vueリスナーの使用例の詳細な説明

1つ目はjQueryのajaxを使用してリクエストを送信することです ユーザーが登録するときに、リス...

docker を使用して minio と java sdk を構築するプロセスの詳細な説明

目次1minioはシンプル2 Dockerビルド minio 2.1 単一ノード2.2 マルチノード...

CSS3の新しいセレクタの例

構造(位置)擬似クラスセレクタ(CSS3) :first-child : 指定されたセレクタは、親要...

MySQLのマスタースレーブレプリケーションと読み取り書き込み分離を理解するための記事

目次導入1. MySQL マスタースレーブレプリケーション1. MySQLレプリケーションタイプ2....