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

推薦する

デザイナーが再びハマーの公式サイトに不満を述べる

昨年、この公開書簡は大ヒットし、羅永浩氏を驚かせた。今日、著者が新しい章を発表するとは思ってもみなか...

URL 書き換えモジュール 2.1 URL 書き換えモジュールのルール記述

目次前提条件テストページの設定書き換えルールの作成命名規則モードの定義アクションの定義設定ファイル内...

Vue はユーザーのログイン状態を維持します (さまざまなトークン保存方法)

目次クッキーの設定方法クッキーのデメリット: LocalStorage と SessionStora...

Dockerプライベートウェアハウスレジストリの導入

使用される Docker イメージが増えるにつれて、イメージを保存する場所、つまりウェアハウスが必要...

LinuxシステムのAnsible自動運用保守導入方法

Ansible は、Python をベースに開発された新しい自動運用・保守ツールです。 多くの古い運...

MySQLログに関する知識のまとめ

目次SQL実行順序ビンログ何ですかいつ生産されるのか何の役に立つんだディスクはいつドロップされますか...

mysql5.7.17.msi インストール グラフィック チュートリアル

mysql-5.7.17.msiのインストール、スクリーンショットに従ってください、ステップバイステ...

Docker で MySQL サービスをデプロイする方法と、遭遇する落とし穴

最近、ポーターを学んでいます。こんなに強力なものがあったなんて、今まで知らなかった気がします。クラス...

Linux システムでの nginx サーバーのインストールと負荷分散構成の詳細な説明

nginx (エンジン x) は、高性能な HTTP およびリバース プロキシ サーバー、メール プ...

Navicat を MySQL に接続するときに発生する 2059 エラーの解決方法

最近、Djangoを学習しているときにデータベースを使用する必要があったため、MySQLで使用するた...

Javascript での JSBridge に関する予備的研究

目次JSBridgeの起源JSBridgeの双方向通信原理JSはネイティブを呼び出すネイティブコール...

display または visibility を通じて HTML 要素を表示または非表示にする

場合によっては、特定の条件に基づいて Web ページ内の HTML 要素を表示するか非表示にするかを...

メタを使用してトラフィックキャッシュをキャンセルし、ページにアクセスするたびにページを更新して簡単にデバッグできるようにします。

コードをコピーコードは次のとおりです。 <!-- ブラウザがローカル キャッシュからページにア...

Dockerイメージの作成Dockerfileとコミット操作

イメージを構築するイメージを構築するには、主に 2 つの方法があります。実行中のコンテナをイメージに...