自聯接在表內部查找答案
這是一個新穎的概念將一個表聯接到自身為什麼要這麼做呢?讀者可能會感到疑惑表中不是已經包含所需的信息了嗎?這既可以說是也可以說否例如嘗試這樣的查詢請按照添加到數據庫中的順序列出在同一年出版的圖書列表
可以使用一個自聯接查詢來回答這一問題
SELECT
fstbk_id
fstbk_title
sndbk_id
sndbk_title
FROM books fst JOIN books snd
ON fstbk_published_year = sndbk_published_year
WHERE fstbk_id < sndbk_id;
bk_id bk_title bk_id bk_title
A La Recherche du Temps Perdu Steppenwolf
Letters From Earth A Short History of Nearly…
( row(s) affected)
首先請注意已經為該表定義了別名否則在該語句的其他部分中數據庫引擎將無法區分所引用的是哪一個表在之前的查詢中使用別名是一個最佳實踐但在自聯接中使用別名是必需的接下來根據出版的年份將該表聯接到自身然後再定義篩選條件指出我們需要同一年出版的不同的圖書記錄(否則將從每一個表中獲取相同的圖書)
盡管在自聯接中將表聯接到自身但必須記住的重要內容是這時處理的依然是該表的兩個實例對於所有的操作和用途兩者是兩個彼此獨立的表在一個查詢中對於一個表可以引用自身多少次並沒有明確的限制
盡管上面的查詢結果也可以使用子查詢和GROUP BY子句來獲得但卻難以在同一行中列出兩本圖書的名稱
自聯接並不是一種特殊類型的聯接但它很好地演示了SQL語法所提供的靈活性
返回目錄SQL實戰新手入門
編輯推薦
Oracle索引技術
高性能MySQL
數據倉庫與數據挖掘培訓視頻教程
From:http://tw.wingwit.com/Article/program/SQL/201311/16468.html