自联接在表内部查找答案
这是一个新颖的概念将一个表联接到自身为什么要这么做呢?读者可能会感到疑惑表中不是已经包含所需的信息了吗?这既可以说是也可以说否例如尝试这样的查询请按照添加到数据库中的顺序列出在同一年出版的图书列表
可以使用一个自联接查询来回答这一问题
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
数据仓库与数据挖掘培训视频教程