MySQL で特定の親行のすべての子行を見つけるソリューション

MySQL で特定の親行のすべての子行を見つけるソリューション

序文

注: テストデータベースのバージョンはMySQL 8.0です

テーブルを作成し、ユーザー scott でデータを入力する必要がある場合は、以下を参照してください。

スコットはテーブルを作成し、データのSQLスクリプトを入力します

1. 需要

JONES に直接的または間接的に勤務するすべての従業員 (つまり、JONES の部下の部下) を検索します。

JONES 傘下の従業員リストは次のとおりです。

±------±-----+
| 名前 | レベル |
±------±-----+
| ジョーンズ | 1 |
| スコット | 2 |
| フォード | 2 |
| アダムス | 3 |
| スミス | 3 |
±------±-----+

2. 解決策

数字の絶対的な最上部と最下部に移動できることは非常に便利です。

このソリューションには特別なフォーマットは必要ありません。目標は、従業員 JONES の配下のすべての従業員 (JONES 自身も含む) を返すことです。

このタイプのクエリは、Oracle の connect by や SQL Server/DB 2/MySQL 8.0 の with 句などの再帰 SQL 拡張機能の有用性を示しています。

再帰emp2(ename,empno,lvl)として
(
SELECT ename,empno,1 レベル
 empから 
 ename = 'JONES' の場合
ユニオンALL
e1.ename、e1.empno、lvl + 1 を選択
 emp e1、emp2 e2から
 ここで、e1.mgr = e2.empno
)
emp2からename、lvlを選択

テストログ:

mysql> 再帰emp2(ename,empno,lvl)として
 -> (
 -> ename、empno、1 レベルを選択します
 -> empから
 -> ename = 'JONES' の場合
 -> 結合ALL
 -> e1.ename、e1.empno、lvl + 1 を選択
 -> emp e1、emp2 e2 から
 -> e1.mgr = e2.empno の場合
 -> )
 -> emp2 から ename、lvl を選択します。
+-------+------+
| 名前 | レベル |
+-------+------+
| ジョーンズ | 1 |
| スコット | 2 |
| フォード | 2 |
| アダムス | 3 |
| スミス | 3 |
+-------+------+
セット内の 5 行 (0.01 秒)

要約する

これで、MySQL で特定の親行のすべての子行を検索する方法についての説明は終わりです。MySQL で特定の親行のすべての子行を検索する方法の詳細については、123WORDPRESS.COM の以前の記事を検索するか、次の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

<<:  Linux での Docker のインストールと展開の例

>>:  ウェブサイトのアクセス速度を向上させるための徹底的な最適化に関するヒント

推薦する

ウェブページのフッターで注意すべきことのまとめ

たくさんのリンクおそらく、このようなサイトをたくさん見たことがあるでしょう。ページの下部に 50 個...

JavaScript における Arguments オブジェクトの使用に関する詳細な説明

目次序文議論の基本概念議論の役割実パラメータと仮パラメータの数を取得する実際のパラメータ値を変更する...

Nginx メモリプールのソースコード分析

目次メモリプールの概要1. nginxデータ構造2. nginxはOSからスペースngx_creat...

MySQLデータベース最適化技術の簡単な紹介

成熟したデータベース アーキテクチャは、最初から高可用性、高スケーラビリティなどの機能を備えて設計さ...

MySQLクエリ速度が遅く、パフォーマンスが低下する原因と解決策

1. データベースクエリの速度に影響を与えるものは何ですか? 1.1 データベースクエリ速度に影響を...

ElasticSearch と ElasticSearch-Head の Docker デプロイメントの実装

この記事では主にDockerを使ってElasticSearch:バージョン6.8.4をデプロイする方...

CentOS 7 はネットワークカードを変更した後、インターネットにアクセスできません

不明なドメイン名 www.baidu.com を Ping するホストのIPアドレスを変更する右クリ...

水平プログレスバーの最後にテキストを表示するための実装コードの CSS 記述

問題の説明仕事で以下の成果を達成したいと考えています。 解決div タグに相対配置を追加し、絶対配置...

単一のdivの正多角形変換を実現する純粋なCSS

前回の記事では、beforeとafterの擬似要素を使用してMaterial Designスタイルの...

HTML でハイパーリンク タグを使用するチュートリアル

ウェブサイトのさまざまな HTML ドキュメントはハイパーリンクを通じて相互に接続され、一貫性のある...

MySQL binlog の解析

目次1. binlogの紹介2. Binlog関連のパラメータ3. バイナリログの内容を分析するIV...

MySQL トランザクション分離レベルの表示と変更の例

トランザクション分離レベルを確認するMySQL では、'%tx_isolation%'...

JSは円形のプログレスバーのドラッグとスライドを実装します

この記事の例では、円形のプログレスバーのドラッグアンドスライドを実現するための具体的なJSコードを紹...

モバイル開発におけるHTML5開発の現状を深く理解する

「私たちは次の一連のモバイル製品を HTML5 で作成しています。」 「ええ、最近は多くの人が Ap...

Docker コンテナを他のサーバーに移行する 5 つの方法

多くの場合、移行は避けられません。ハードウェアのアップグレード、データ センターの変更、古いオペレー...