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

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

推薦する

非常に便利なオープンソース Docker ツール 5 つを強くお勧めします

導入Docker コミュニティは、さまざまなユースケースを処理するのに役立つ多くのオープンソース ツ...

CSS で子 div の高さを親コンテナの残りのスペースに合わせる方法

1. フローティング方式を使用する効果画像: コードは次のとおりです: (.content の高さは...

MySql のグループ化と各グループからランダムに 1 つのデータを取得する

アイデア: 最初にランダムに並べ替えてからグループ化します。 1. テーブルを作成します。 テーブル...

html+cssレイアウトの3つの方法(ナチュラルレイアウト/フローレイアウト/ポジショニングレイアウト)

1. 自然なレイアウト<br />レイアウトは変更せずに自動的に左揃えになります。 2....

Vue2/vue3 ルーティング権限管理方法の例

1. Vueルーティングの権限制御には一般的に2つの方法がありますa. ルーティングメタ情報(メタ)...

HTML チュートリアル: よく使われる HTML タグのコレクション (5)

導入された HTML タグは、必ずしも XHTML 仕様に完全に準拠しているわけではありません。実際...

Apache Tomcat と IDEA エディターの統合に関する詳細なチュートリアル

1. Apache Tomcat 公式サイトから Tomcat 圧縮パッケージをダウンロードします。...

Windows プラットフォームでの MySQL のインストールと設定方法と注意事項

2.1、msiインストールパッケージ2.1.1、インストール特に重要なのは、インストール前に、元の ...

Webフロントエンド開発におけるエラーを見つけるための基本的な考え方

WEB開発は主に2つのインタラクション(B/Sデータ)から構成されますブラウザ: 1html、css...

「MySQL サービスを開始できません エラー 1069」を解決する方法

今日、外出中に同僚から、ウェブサイトのバックエンドにアクセスできないというメッセージが届きました。と...

CSS3 rgb と rgba (透明色) の使い方の詳しい説明

誰もが色にとても敏感だと思います。私たちの目が見るところにはどこにでも色があります。では、CSS で...

vue-router のハッシュモードと履歴モードの違い

vue-routerには2つのモードがありますハッシュモード履歴モード1. シングルページアプリケー...

数百万のデータに対して MySQL クエリを最適化する 4 つの方法

目次1. 時間が経つにつれて限界が遅くなる理由2. 百万データシミュレーション1. 従業員テーブルと...

vuex での Getter の使用法の詳細な説明

序文Vuex を使用すると、ストア内に「ゲッター」を定義できます (これはストアの計算されたプロパテ...

Vueはキー表示のショートカットキー効果を取得する入力コンポーネントを実装します

ページ上でショートカットキーをカスタマイズする要件に遭遇し、ショートカットキーを設定して表示する場所...