摘要:本教學說明如何使用 SQL 自我聯結技術將表格聯結到自身。
SQL 自我聯結簡介
有時,將表格聯結到自身會很有用。這種聯結類型稱為自我聯結。
我們將表格聯結到自身,以評估同一表格中其他列的資料。要執行自我聯結,我們可以使用 內部聯結 或 左聯結 子句。
由於同一個表格在單一查詢中出現兩次,因此我們必須使用表格別名。以下語句說明如何將表格聯結到自身。
SELECT
column1,
column2,
column3,
...
FROM
table1 A
INNER JOIN table1 B ON B.column1 = A.column2;
Code language: SQL (Structured Query Language) (sql)
在這個語句中,使用 INNER JOIN 子句將 table1 聯結到自身。A 和 B 是 table1 的表格別名。B.column1 = A.column2
是聯結條件。
除了 INNER JOIN 子句之外,您還可以使 LEFT JOIN 子句。
讓我們看幾個使用自我聯結技術的範例。
SQL 自我聯結範例
請看以下 employees
表格。

manager_id
欄位指定員工的經理。以下語句將 employees 表格聯結到自身,以查詢誰向誰報告的資訊。
SELECT
e.first_name || ' ' || e.last_name AS employee,
m.first_name || ' ' || m.last_name AS manager
FROM
employees e
INNER JOIN
employees m ON m.employee_id = e.manager_id
ORDER BY manager;
Code language: SQL (Structured Query Language) (sql)

總裁沒有任何經理。在 employees 表格中,包含總裁的列的 manager_id 為 NULL。
由於內部聯結子句僅包含在另一個表格中有匹配列的列,因此總裁沒有出現在上述查詢的結果集中。
為了在結果集中包含總裁,我們使用 LEFT JOIN 子句而不是 INNER JOIN 子句,如下列查詢所示。
SELECT
e.first_name || ' ' || e.last_name AS employee,
m.first_name || ' ' || m.last_name AS manager
FROM
employees e
LEFT JOIN
employees m ON m.employee_id = e.manager_id
ORDER BY manager;
Code language: SQL (Structured Query Language) (sql)

在本教學中,您已學習如何使用 INNER JOIN 或 LEFT JOIN 子句將表格聯結到自身。
這個教學對您有幫助嗎?