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

推薦する

Java で ffmpeg を呼び出してビデオ形式を flv に変換する方法の詳細な説明

Java で ffmpeg を呼び出してビデオ形式を flv に変換する方法の詳細な説明注:以下のプ...

nginx 設定チュートリアルにおける add_header の落とし穴の詳細な説明

序文add_header は、headers モジュールで定義されたディレクティブです。名前が示すよ...

フレックスレイアウトのスペース間の最後の行の左揃えの問題を解決する方法

まずはコードと効果を見てみましょう↓ <スタイル> 。主要 { アウトライン: 1px ...

Centos7 に Docker をインストールします (2020 の最新バージョンが利用可能、コピーして貼り付けるだけ)

操作については、こちらの公式ドキュメントを参照してください。インストール1. 古いバージョンの do...

emとは?emとpxの紹介と変換方法

それは何ですか? em はフォントの高さを指し、どのブラウザでもデフォルトのフォントの高さは 16 ...

Windows 10 で MySQL の解凍バージョンをインストールする方法の詳細なグラフィック チュートリアル

MySQL のインストールは、インストール バージョンと解凍バージョンに分かれています。インストール...

React 純粋関数コンポーネント setState がページ更新を更新しない問題の解決方法

目次問題の説明:原因分析:解決:補足: Reactでは、フックが使用されている場合、useState...

Linux で open-vswitch をインストールおよびアンインストールする方法

1. ソースコードからovsをコンパイルしてインストールします。依存関係をインストールします: # ...

mysqlはストアドプロシージャを使用してツリーノード取得メソッドを実装します。

図に示すように: テーブルデータこのようなツリーの場合、「Gao Yinrui」の下のすべてのノード...

Tomcat でサーブレット URL パターンを構成する際の問題の詳細な説明

tomcat の web.xml を構成する場合、サーブレットは比較的重要な問題です。ここでは、サー...

HTML テーブル マークアップ チュートリアル (9): セル間隔属性 CELLSPACING

テーブルがコンパクトになりすぎないように、テーブル内のセル間に一定の距離を設定できます。基本的な構文...

Dockerイメージのローカル移行の実装

最近 Docker を勉強しているのですが、よく問題に遭遇します。Docker イメージをダウンロー...

VueのVuexの4つの補助機能について

目次1. 補助機能2. 例1. mapState と mapGetters 2. mapMutati...

Ubuntu 20.04 LTS で Java 開発環境を構成する

Java開発キットjdkをダウンロードするJDK のダウンロード アドレスはhttp://www.o...

Vueは完全な選択機能を実装しています

この記事の例では、完全な選択機能を実装するためのVueの具体的なコードを参考までに共有しています。具...