この記事では、Mysql の自己結合クエリについて説明します。ご参考までに、詳細は以下の通りです。 自己結合クエリ 次のシナリオを想像してください。電子商取引の Web サイトでは、サイト上の製品を階層に分類し、1 つのカテゴリに複数のサブカテゴリを設定し、各サブカテゴリにさらに別のサブカテゴリを設定したいと考えています。たとえば、デジタル製品のカテゴリには、ノートパソコン、デスクトップ、スマートフォンなどがあり、ノートパソコン、デスクトップ、スマートフォンはブランド別に分類でき、ブランドは価格別に分類できます。おそらく、これらの分類は非常に深いレベルに達し、ツリーのような構造を示すでしょう。では、このデータはデータベースでどのように表現すればよいのでしょうか?データベースに ID とカテゴリ名を保存するための 2 つのフィールドを作成し、3 番目のフィールドを使用してカテゴリのサブカテゴリまたは親カテゴリの ID を保存し、最後に自己結合を通じて目的の結果をクエリすることができます。 自己結合クエリは、実際には結合クエリと同等であり、左側のテーブル (親テーブル) と右側のテーブル (子テーブル) の両方がそれ自体である点を除いて、2 つのテーブルを必要とします。自己結合クエリを実行するときは、テーブルをそれ自体に結合し、親テーブルと子テーブルに 2 つの異なるエイリアスを指定してから、結合条件を添付します。次の例を見てください。 1. データ テーブルを作成します。 テーブルtdb_catesを作成します( id smallint 主キー auto_increment、 cate_name varchar(20) NULLではない、 parent_id smallint が null ではない ); 注: cate_name はカテゴリの名前を表し、parent_id は親カテゴリの ID を表します。 2. データを挿入します。 tdb_cates(cate_name, parent_id) に値('デジタル製品', 0) を挿入します。 tdb_cates(cate_name, parent_id) に値('家庭用品', 0) を挿入します。 tdb_cates(cate_name, parent_id) に値('Notebook', 1) を挿入します。 tdb_cates(cate_name, parent_id) に値('smartphone', 1) を挿入します。 tdb_cates(cate_name, parent_id) に値('電化製品', 2) を挿入します。 tdb_cates(cate_name, parent_id) に値('furniture', 2) を挿入します。 tdb_cates(cate_name, parent_id) に値 ('冷蔵庫'、5) を挿入します。 tdb_cates(cate_name, parent_id) に値('洗濯機', 5) を挿入します。 tdb_cates(cate_name, parent_id) に値('車のブランド', 0) を挿入します。 tdb_cates(cate_name, parent_id) に値 ('Buick', 9) を挿入します。 tdb_cates(cate_name, parent_id) に値('宝马', 9) を挿入します。 tdb_cates(cate_name, parent_id) に値('Chevrolet', 9) を挿入します。 tdb_cates(cate_name, parent_id) に値('Home Textiles', 0) を挿入します。 クエリ結果: 3. すべてのカテゴリとその親カテゴリをクエリします。2つのテーブル (両方とも tdb_cates) があり、左側のテーブルが子テーブル、右側のテーブルが親テーブルであると仮定します。子テーブルの id、子テーブルの cate_name、および親テーブルの cate_name をクエリします。結合条件は、子テーブルの parent_id が親テーブルの id と等しいことです。 次のようにコードをコピーします。 tdb_cates s から s.id、s.cate_name、p.cate_name を選択し、tdb_cates p を s.parent_id=p.id に結合します。 クエリ結果: 4. すべてのカテゴリとカテゴリのサブカテゴリをクエリします。テーブルが 2 つ (両方とも tdb_cates) あり、左側のテーブルが子テーブル、右側のテーブルが親テーブルであると仮定します。子テーブルの id、子テーブルの cate_name、および親テーブルの cate_name をクエリします。接続条件は、子テーブルの id が親テーブルの parent_id と等しいことです。 次のようにコードをコピーします。 tdb_cates s から s.id、s.cate_name、p.cate_name を選択し、tdb_cates p を p.parent_id=s.id に結合します。 クエリ結果: MySQL 関連のコンテンツに興味のある読者は、このサイトの次のトピックをチェックしてください: 「MySQL クエリ スキル」、「MySQL 共通関数の概要」、「MySQL ログ操作スキル」、「MySQL トランザクション操作スキルの概要」、「MySQL ストアド プロシージャ スキル」、および「MySQL データベース ロック関連スキルの概要」 この記事が皆様のMySQLデータベース設計に役立つことを願っています。 以下もご興味があるかもしれません:
|
<<: Windows 10 に Apache 2.4.41 をインストールするチュートリアル
>>: vueプロジェクトのマルチ環境設定(.env)の実装
Web デザインにおけるツリーとは何ですか?簡単に言うと、リンクをクリックするとサブディレクトリが展...
スクリーン リーダー ソフトウェアの操作ページについて話しているとき、彼はフロントエンドの学生たちに...
MySQL レプリケーションの詳細な説明と簡単な例マスタースレーブレプリケーション技術は、MySQL...
1. CentOS8でのDockerのインストール カール https://download.doc...
1. Oracle をインストールします。インターネット上には Oracle のインストール手順が多...
別のツリー構造があるJavascriptオブジェクトでは、このツリーが本物であると伝えるだけでよいD...
tomcatの設定1. 実行構成をクリック 2. tomcat localを選択 3. tomcat...
jsx/tsxファイルを直接作成できます今回のプロジェクト構成は以下のとおりです。 vueファイルで...
導入MySQL はレプリケーションを通じてストレージ システムの高可用性を実現します。現在、MySQ...
関連記事: Web コンテンツ ページを作成するための 9 つの実用的なヒント<br />...
目次必要:機能ポイントレンダリング実装のアイデア具体的なコード(react\taro3.0)特定のコ...
この記事では主に、Web ページ上でデスクトップ exe プログラムを呼び出す方法を紹介します。 W...
ミニネットMininet は軽量のソフトウェア定義ネットワークおよびテスト プラットフォームです。軽...
フォームは、get と post の 2 つのデータ転送方法を提供します。どちらもデータを送信する方...
vue を使用してプロジェクトを開発する場合、フロントエンドでは次のような日付と時刻を計算する必要が...