次の方法で共有


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 というエイリアスを使っています。エイリアスの詳細については、「方法 : テーブルの別名を作成する」を参照してください。

参照

概念

結果ペインのデータの操作

その他の技術情報

検索基準の指定