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 のインストールと展開の例

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

推薦する

Vue+thinkphp5.1+axiosでファイルアップロードを実現

この記事では、thinkphp5.1 + Vue+axiosを使用してファイルをアップロードする方法...

JavaでTomcatサーバーを起動/停止する方法

1. プロジェクト構造 2.Tomcat.javaを呼び出す パッケージ com.calltomca...

Dockerイメージ内のファイルを表示する方法

Dockerイメージ内のファイルを表示する方法1. すでに実行中の場合すでに実行中のイメージについて...

div要素に丸い境界線を追加する方法

以下のように表示されます。 CSSコードコンテンツをクリップボードにコピー分割{境界線: 2px 固...

vsCodeはワンクリックでvueテンプレートを生成します

1. ショートカットCtrl + Shift + Pを使用してコンソールを呼び出します 2、「スニペ...

JS と Nodejs におけるイベント駆動型開発についての簡単な説明

目次イベント駆動型とパブリッシュ・サブスクライブ型ブラウザの JavaScript ではイベント駆動...

MySQL データベースの最適化: テーブルとデータベースのシャーディング操作の詳細な説明

この記事では、例を使用して、MySQL データベースの最適化のためのテーブルおよびデータベース シャ...

Zabbix ベースの Jenkins プロセス監視の詳細な説明

1. 監視アーキテクチャ図 2. 実装のアイデアJenkins に Metrics プラグインをイン...

Eclipse は Tomcat を構成しますが、Tomcat には無効なポート解決策があります

目次1. EclipseがTomcatを構成する2. Tomcat の無効なポートの解決方法方法1:...

要素シャトルフレームのパフォーマンス最適化の実装

目次背景解決新しい質問高度な背景シャトル ボックスが大量のデータを処理すると、レンダリングされる D...

HTMLで境界線を設定する3つの方法の詳細な説明

HTML で境界線を設定する 3 つの方法 境界線の幅: 1px 2px 2px; 境界線のスタイル...

MySQL 8.0.21.0 コミュニティ エディションのインストール チュートリアル (詳細な図解)

1. MySQLをダウンロードするMySQL 公式 Web サイトにログインし、MSI インストー...

JS の原価と基準価額の問題に関する簡単な分析

プリミティブ値 -> プリミティブ型Number String Boolean undefin...

Vue カプセル化 TabBar コンポーネントの完全なステップ記録

目次実装のアイデア:ステップ 1: TabBar と TabBarItem のコンポーネント カプセ...

純粋な CSS でカスタムラジオボタンとチェックボックス機能を実装する

1. 効果を達成する 2 知識ポイント2.1 <label> タグHTML では、<...