ホームページ > データベース > mysql チュートリアル > SQL で同じテーブルを 2 回効率的に結合して、複数の結合条件からデータを取得するにはどうすればよいですか?

SQL で同じテーブルを 2 回効率的に結合して、複数の結合条件からデータを取得するにはどうすればよいですか?

Patricia Arquette
リリース: 2025-01-07 07:32:40
オリジナル
931 人が閲覧しました

How Can I Efficiently Join the Same Table Twice in SQL to Retrieve Data from Multiple Join Conditions?

同じテーブルを 2 回結合する: 包括的な調査

このディスカッションでは、開発者が直面する一般的なジレンマ、つまり同じテーブルを効率的に結合するという問題に取り組みます。テーブルを何度も。課題は、両方の結合条件からのデータを含む結果セットを取得することにあります。

次のテーブル構造を考えてみましょう:

*Table1*
ID
PhoneNumber1
PhoneNumber2

*Table2*
PhoneNumber
SomeOtherField
ログイン後にコピー

目標は、PhoneNumber1、PhoneNumber1、PhoneNumber2 に対応する SomeOtherField を取得することです。 、および PhoneNumber2 に対応する SomeOtherField。

方法 1: 複数のテーブル結合

このアプローチには、テーブルでの結合が 2 回含まれます:

SELECT t1.PhoneNumber1, t1.PhoneNumber2, 
   t2.SomeOtherFieldForPhone1, t3.someOtherFieldForPhone2
FROM Table1 t1
INNER JOIN Table2 t2
   ON t2.PhoneNumber = t1.PhoneNumber1
INNER JOIN Table2 t3
   ON t3.PhoneNumber = t1.PhoneNumber2
ログイン後にコピー

このメソッドは信頼性がありますが、少し冗長に見えます。

メソッド 2: OR -Based Joining

クエリを簡略化するために、開発者は次のように提案しています。 ON 条件で OR 句を使用する:

SELECT ...
FROM Table1
INNER JOIN Table2 
   ON Table1.PhoneNumber1 = Table2.PhoneNumber OR
      Table1.PhoneNumber2 = Table2.PhoneNumber
ログイン後にコピー

ただし、このアプローチは SQL では無効であり、エラーが発生します。

ベスト プラクティス

このシナリオでは、その明確さと信頼性により、方法 1 が推奨されます。電話番号などの自然キーの使用を避けるためにテーブルをリファクタリングすることを強くお勧めします。自然キーは変更されやすいため、メンテナンス プロセスが困難になります。

同じテーブルを複数回結合する場合、可読性と理解を容易にするためにエイリアシングが不可欠です。エイリアスは、テーブルの複数のインスタンスを区別するのに役立ちます。

方法 1 の最適化されたバージョンを次に示します:

SELECT t.PhoneNumber1, t.PhoneNumber2, 
   t1.SomeOtherFieldForPhone1, t2.someOtherFieldForPhone2
FROM Table1 t
JOIN Table2 t1 ON t1.PhoneNumber = t.PhoneNumber1
JOIN Table2 t2 ON t2.PhoneNumber = t.PhoneNumber2
ログイン後にコピー

以上がSQL で同じテーブルを 2 回効率的に結合して、複数の結合条件からデータを取得するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート