1 つのクエリにおける同一テーブルの複数回使用
1 つのクエリの中で、同じテーブルを 2 回以上使用できます。 この方法は、次に示すような状況で使用します。
再帰リレーションシップを使って自己結合を作成する 再帰リレーションシップを使用して、テーブルをそのテーブル自身に結合できます。再帰リレーションシップとは、参照元の外部キー列と参照先の主キー列が同じテーブルにあるリレーションシップです。 たとえば、employee テーブルに employee.manager_emp_id という列があり、manager_emp_id から employee.emp_id への外部キーが存在するものとします。 employee テーブルの各行の manager_emp_id 列は従業員の上司を示します。 より正確には、manager_emp_id 列は従業員の上司の emp_id を示しています。
再帰リレーションシップを使って、テーブルをそれ自体に結合することで、上司の名前とその部下の名前を各行に含む結果セットを作成できます。 結果の SQL ステートメントは次のようになります。
SELECT boss.lname, boss.fname, employee.lname, employee.fname FROM employee INNER JOIN employee boss ON employee.manager_emp_id = boss.emp_id
再帰リレーションシップを使って結合を作成する方法の詳細については、「方法 : 自己結合を自動的に作成する」を参照してください。
再帰リレーションシップを使わずに自己結合を作成する 再帰リレーションシップを使用しなくても、テーブルをそのテーブル自身に結合できます。 たとえば、従業員とその従業員の指導者候補を示す行を含む結果セットを作成できます。 指導者候補とは、より高い職務レベルを持つ従業員です。結果の SQL ステートメントは次のようになります。
SELECT employee.fname, employee.lname, mentor.fname, mentor.lname FROM employee INNER JOIN employee mentor ON employee.job_lvl < mentor.job_lvl
この結合では、等価性以外の条件が使用されています。 等価性以外の条件を使ってテーブルを結合する方法の詳細については、「Join 比較演算子」を参照してください。
関連のない列を使って自己結合を作成する方法の詳細については、「方法 : 自己結合を手動作成する」を参照してください。
自己結合を使わずにテーブルを 2 回使用する 自己結合を使用しなくても、クエリ内で同じテーブルを 2 回以上使用できます。 たとえば、愛読書の著者のほかの作品を含む結果セットを作成できます。 この場合、titleauthors テーブルを 2 回使用します。1 回目で愛読書 (『Is Anger the Enemy?』) の著者を検索し、2 回目でその著者が書いた他の本を検索します。 結果の SQL ステートメントは次のようになります。
SELECT other_title.title FROM titles favorite_title INNER JOIN titleauthor favorite_titleauthor ON favorite_title.title_id = favorite_titleauthor.title_id INNER JOIN authors ON favorite_titleauthor.au_id = authors.au_id INNER JOIN titleauthor other_titleauthor ON authors.au_id = other_titleauthor.au_id INNER JOIN titles other_title ON other_titleauthor.title_id = other_title.title_id WHERE favorite_title.title = 'Is Anger the Enemy?' AND favorite_title.title <> other_title.title
注意
1 つのテーブルが複数回異なる目的で使用されていることを明確にするため、前のクエリでは、favorite_title、favorite_titleauthor、other_titleauthor、および other_title というエイリアスを使っています。エイリアスの詳細については、「方法 : テーブルの別名を作成する」を参照してください。