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

推薦する

Javascript における非同期待機の詳細な理解

この記事では、async/await がすべての JavaScript 開発者にとって非同期プログラ...

HTML フレームセットのサンプルコード

この記事では、Frameset が作成した、できるだけシンプルなフレームワークを紹介します。さて、ま...

MySQL ストアド プロシージャの権限の問題の概要

MySQL ストアド プロシージャは、確かに、非常にまれな使用シナリオのように見えます。この問題は、...

Mysql ALTER TABLE はフィールドを追加するときにテーブルをロックしますか?

目次MySQL 5.6以前MySQL 5.6以降要約する知らせMySQL 5.6以前更新手順元のテー...

JavaScriptコールバック関数の詳細な理解

目次序文クイックレビュー: JavaScript 関数関数とは何ですか?関数を宣言する関数の呼び出し...

HTML で dl(dt,dd)、ul(li)、ol(li) を使用する方法

HTML <dl> タグ#定義と使用法<dl> タグは定義リストを定義します...

プロファイルを使用して遅い SQL を分析する MySQL の詳細な説明 (グループ左結合はサブクエリよりも効率的です)

プロファイルを使用して遅いSQLを分析するMySQL の SQL パフォーマンス アナライザーの主な...

証明書を使用してリモート Docker サーバーに接続する方法

目次1. スクリプトを使用してDockerのTLSを暗号化する2. Dockerの設定を変更してリモ...

Vue の大容量ファイルアップロードとブレークポイント再開アップロードの実装

目次ファイルアップロードのための2つのソリューションファイルストリーム(フォームデータ)に基づくクラ...

IE6 で幅と高さがおかしいバグ

図に示すように: しかし、IE6で表示すると、right:1px:になります。 IE6 には、幅と高...

Navicateを使用してAlibaba Cloud Server上のMySQLに接続する

1. まず、サーバーの mysql にアクセスして権限を変更します。 GRANT オプション付きで、...

シンプルなカルーセル チャートを実装するための JavaScript の最も完全なコード分析 (ES5)

この記事では、シンプルなカルーセル効果を実現するためのJavaScriptの具体的なコードを参考まで...

CSS3 box-shadow プロパティの詳細な例

CSS3 - 影の追加(ボックスシャドウの使用) CSS3 - div またはテキストに影を追加する...

MySQLでMyISAMストレージエンジンをInnodbに変更した操作記録のまとめ

一般的に、MySQL はデフォルトでさまざまなストレージ エンジンを提供しており、次のように表示され...

nginx + php の「入力ファイルが指定されていません」の解決策

本日、ローカル開発環境で突然「入力ファイルが指定されていません」というエラーが発生してしまいました。...