共用方式為


在單一查詢中使用同一資料表兩次

您可以在單一查詢中使用相同資料表兩次 (或兩次以上)。 您可以在下列情況中進行此項作業。

  • 使用自反關聯性建立自我聯結:您可以使用自反關聯性 (Reflexive Relationship) 將資料表聯結到該資料表本身,自反關聯性是指進行參考的外部索引鍵資料行和被參考的主索引鍵資料行位於相同的資料表中。 例如,假設員工資料表含有額外的 employee.manager_emp_id 資料行,而且外部索引鍵存在於 manager_emp_id 到 employee.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
    

    請注意聯結使用相等以外的條件。 如需使用相等以外的條件來建立資料表的詳細資訊,請參閱聯結比較運算子。 

    如需使用非關聯資料行建立自我聯結的詳細資訊,請參閱 如何:手動建立自我聯結

  • 不須自我聯結而使用相同資料表兩次:即使不使用自我聯結,您還是可以在查詢中使用同一資料表兩次 (或兩次以上)。 例如,您可以建立結果集,其中包含你最喜歡的書其作者和該作者的其他書籍。 在這個情況中,您可以使用 titleauthors 資料表兩次,其中一次用來尋找您最喜歡的書其作者 (Is Anger the Enemy?),另一次用來尋找這些作者的其他書籍。 產生的 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 
    
    注意事項注意事項

    為了區別任何一個資料表的多重使用,前述查詢會使用下列別名:favorite_title、favorite_titleauthor、other_titleauthor 和 other_title。如需別名的詳細資訊,請參閱 如何:建立資料表別名

請參閱

概念

使用結果窗格中的資料

其他資源

指定搜尋準則