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

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

推薦する

CSS を使用して複数の方法で下揃えを実装するサンプル コード

会社のビジネス要件により、次の図の赤い領域の効果を達成する必要があります。 効果の説明: 1. 赤い...

Javascriptでシングルトンパターンを実装する方法

目次概要コードの実装シングルトンパターンの簡易版改良版プロキシバージョンシングルトンモード遅延シング...

mysqlreplicate を使って MySQL マスタースレーブを素早く構築する方法

導入mysql-utilities ツールセットは、DBA のツールボックスとも言えるさまざまなツー...

アルバムと写真をアルバムに保存するためのWeChatアプレット

私は現在、Xiao Nian Gao に似たビデオおよびツール アプリを開発しています。ユーザーが作...

nginx プロキシでの複数の 302 応答の解決策 (nginx Follow 302)

proxy_intercept_errors と recursive_error_pages を使...

Mysql を 5.7 にアップグレードした後のグループ クエリの問題を解決する

問題を見つける最近MySQLをMySQL 5.7にアップグレードした後、次のようなクエリでグループ化...

ウェブページ入力ボックスのスタイルトリガー効果

<br />この例では、主に onblur と onFocus という 2 つのパラメー...

CSSで記事の区切り線のスタイルを実装するさまざまな方法のまとめ

この記事では、CSS で記事の区切り線を実装するさまざまな方法をまとめています。区切り線はページを美...

Vue での weixin-js-sdk の一般的な使用方法の詳細な説明

リンク: https://qydev.weixin.qq.com/wiki/index.php?ti...

MySQL 1130例外、リモートログインできない解決策

目次質問: 1. リモートログイン権限を有効にする: 2. MySQLの権限を更新します。 3. テ...

LinuxでのDockerのインストールチュートリアル

Docker パッケージは、デフォルトの CentOS-Extras リポジトリにすでに含まれていま...

CSS 命名: BEM、スコープ付き CSS、CSS モジュール、CSS-in-JS の説明

CSS の適用範囲はグローバルです。プロジェクトがどんどん大きくなり、参加する人が増えるにつれて、命...

CSS 等高レイアウトの一般的な方法

等高レイアウト同じ親コンテナー内の同じ高さの子要素のレイアウトを指します。等高レイアウトの実装の観点...

Vue でルーティング遷移効果を実装する 4 つの方法

Vue ルーター トランジションは、Vue プログラムにパーソナライズされたエフェクトをすばやく簡単...