如何:手動建立自我聯結
即使資料表在資料庫中不具有自反關聯性,也可以將資料表聯結至它本身。 例如,可以使用自我聯結來找出住在同一城市的作者組。
如同任何聯結一樣,自我聯結至少需要兩個資料表。 差異在不是將第二個資料表加入查詢,而是加入同一資料表的第二個執行個體。 如此就可以比較資料表第一個執行個體的資料行,與第二個執行個體中的同一資料行,以便讓您比較資料行中的各值。 查詢和檢視表設計工具會指派別名給資料表的第二個執行個體。
例如,如果要建立自我聯結以找出住在 Berkeley 的所有作者組,您可以比較資料表第一個執行個體中的 city 資料行與第二個執行個體中的 city 資料行。 產生的查詢可能如下所示:
SELECT
authors.au_fname,
authors.au_lname,
authors1.au_fname AS Expr2,
authors1.au_lname AS Expr3
FROM
authors
INNER JOIN
authors authors1
ON authors.city
= authors1.city
WHERE
authors.city = 'Berkeley'
建立自我聯結通常需要多重聯結條件。 若要暸解其原因,請考量先前查詢的結果:
Cheryl Carson Cheryl Carson
Abraham Bennet Abraham Bennet
Cheryl Carson Abraham Bennet
Abraham Bennet Cheryl Carson
第一個資料列毫無用處,其表示 Cheryl Carson 與 Cheryl Carson 住在同一城市。 第二個資料列也毫無用處。 若要消除這些無用的資料,可以加入另一個條件,使其只保留作者姓名不同的結果資料列。 產生的查詢可能如下所示:
SELECT
authors.au_fname,
authors.au_lname,
authors1.au_fname AS Expr2,
authors1.au_lname AS Expr3
FROM
authors
INNER JOIN
authors authors1
ON authors.city
= authors1.city
AND authors.au_id
<> authors1.au_id
WHERE
authors.city = 'Berkeley'
結果集則改善為:
Cheryl Carson Abraham Bennet
Abraham Bennet Cheryl Carson
但這兩個結果資料列是多餘的。 第一個資料列說明 Carson 與 Bennet 住在同一城市,第二個資料列則說明 Bennet 與 Carson 住在同一城市。 若要消除這種多餘狀況,可以將第二個聯結條件由 "not equals" 變更為 "less than"。 產生的查詢可能如下所示:
SELECT
authors.au_fname,
authors.au_lname,
authors1.au_fname AS Expr2,
authors1.au_lname AS Expr3
FROM
authors
INNER JOIN
authors authors1
ON authors.city
= authors1.city
AND authors.au_id
< authors1.au_id
WHERE
authors.city = 'Berkeley'
結果集則如下所示:
Cheryl Carson Abraham Bennet
![]() |
---|
在下列指示的某些 Visual Studio 使用者介面項目中,您的電腦可能會顯示不同的名稱或位置:您所擁有的 Visual Studio 版本以及使用的設定會決定這些項目。如需詳細資訊,請參閱 Visual Studio 設定。 |
若要手動建立自我聯結
將想要使用的資料表或資料表值物件加入 [圖表] 窗格中。
再加入同一資料表,如此 [圖表] 窗格會顯示兩次相同的資料表或資料表值物件。
[查詢和檢視表設計工具] 在資料表名稱加入連續編號,來指派第二個執行個體的別名。 此外,[查詢和檢視表設計工具] 會在 [圖表] 窗格的兩個資料表或資料表值物件之間建立聯結線。
在聯結線上按一下滑鼠右鍵,然後在捷徑功能表中選擇 [屬性]。
在 [屬性] 視窗中按一下 [聯結條件及型別],然後按一下屬性右方的省略符號 (…)。
如有需要,在 [聯結] 對話方塊中變更主索引鍵之間的比較運算子。 例如,可以將運算子變更為小於 (<)。
將資料表或資料表值物件的第一個執行個體的主聯結資料行名稱,拖放至第二個執行個體的對應資料行,即可建立其他聯結條件 (例如,authors.zip = authors1.zip)。
指定查詢的其他選項,例如輸出資料行、搜尋條件和排序次序。