ホームページ >データベース >mysql チュートリアル >同じテーブルの行を比較するために MySQL で自己結合はどのように機能しますか?

同じテーブルの行を比較するために MySQL で自己結合はどのように機能しますか?

DDD
DDDオリジナル
2024-11-19 00:22:02739ブラウズ

How do self-joins work in MySQL to compare rows from the same table?

MySQL の自己結合はどのように機能しますか?

MySQL の自己結合には、同じテーブルの 2 つのインスタンスを結合することが含まれます。通常、さまざまな別名。特定の基準に基づいて同じテーブルの行を比較できます。

クエリの説明

指定されたクエリを分析してみましょう:

SELECT event2.id, event2.startdate, event2.price
FROM mm_eventlist_dates event1
JOIN mm_eventlist_dates event2 
ON event2.startdate = date_add(event1.enddate, INTERVAL 1 DAY)
WHERE event1.id=$id

FROM 句

これはどのテーブルを指定しますか結合する:

FROM mm_eventlist_dates event1
JOIN mm_eventlist_dates event2 

同じテーブル mm_eventlist_dates が 2 回使用され、event1 およびevent2 としてエイリアス化されています。

ON 句

これは結合しますに基づくテーブルの 2 つのインスタンス条件:

ON event2.startdate = date_add(event1.enddate, INTERVAL 1 DAY)

開始日がevent1の対応する行の終了日の翌日に一致する行をevent2で検索します。

WHERE句

これは、指定された条件に基づいて結果をフィルタリングします:

WHERE event1.id=$id

It ID が指定された変数 $id と一致する行をevent1から選択します。

SELECT Clause

これにより、結合された行から目的のフィールドが選択されます:

SELECT event2.id, event2.startdate, event2.price

event2 インスタンスから ID、開始日、価格を取得します。これには、指定されたイベントに続くイベントに関する情報が含まれています(event1) 1 日まで。

ビジュアル デモンストレーション

mm_eventlist_dates テーブルに次のレコードがあると想像してください。

event1.id event1.enddate event2.id event2.startdate
1 2023-03-01 2 2023-03-02
3 2023-03-03 4 2023-03-04

指定されたquery:

  • でevent1を取得します。 id は $id と等しくなります (例: 1)。
  • 終了日プラス 1 日 (2023-03-02) を計算します。
  • event2 で同じ開始日を持つ行を検索します ( 2023-03-02).
  • 一致するイベントの ID、開始日、価格を返します2 row.

これは、MySQL の自己結合により、同じテーブル内であっても、指定された基準に基づいて関連する行を識別できる方法を示しています。

以上が同じテーブルの行を比較するために MySQL で自己結合はどのように機能しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。