重複ルックアップに対するテーブル結合の最適化
同じテーブルを 2 回結合する場合、通常、複数の JOIN 句を使用するか、JOIN 句を組み込むという 2 つのアプローチがあります。 ON 句の OR 条件。
複数の JOIN 句(方法 1):
例で示したように、この方法には、一致する条件ごとに個別の JOIN を作成することが含まれます:
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
このアプローチは簡単で、結果がデータには必要な列がすべて含まれています。
ON 句の OR 条件 (メソッド2):
このメソッドは、JOIN 条件を 1 つに結合することでクエリを簡素化しようとします:
SELECT ... FROM Table1 INNER JOIN Table2 ON Table1.PhoneNumber1 = Table2.PhoneNumber OR Table1.PhoneNumber2 = Table2.PhoneNumber
ただし、このアプローチでは、次の場合に結果セットに行が重複する可能性があります。指定された行に対して両方の一致条件が満たされています。
最良実践:
推奨される方法は、複数の JOIN 句を使用した 方法 1 です。これにより、データの重複を回避しながら、特定の基準に基づいてテーブルを結合する、より明示的かつ信頼性の高い方法が提供されます。
冗長結合の回避:
次の方法で冗長結合を回避することが重要です。適切な別名と命名規則を使用します。たとえば、次のクエリを簡素化できます:
SELECT t.PhoneNumber1, t.PhoneNumber2, t1.SomeOtherFieldForPhone1, t1.someOtherFieldForPhone1 FROM Table1 t JOIN Table2 t1 ON t1.PhoneNumber = t.PhoneNumber1 JOIN Table2 t2 ON t2.PhoneNumber = t.PhoneNumber2
結合テーブル (t1 と t2 など) にエイリアスを付けることで、冗長性を減らし、クエリを読みやすくすることができます。
以上が重複テーブル検索には複数の JOIN 句と ON 句の OR 条件のどちらが適していますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。