针对相同的表进行的连接被称为“自连接”(self join)
那么为什么要把相同的一张表连接起来呢?一开始还是挺难理解的。把它想象成连接两张不同的表,这样容易理解一些。事实上,自连接还是有很多用处的
1. 在同一张表内进行比较
1.1查找收入超过各自经理的员工的姓名
SELECT e1.Name AS employee_name FROM Employee AS e1, Employee AS e2 WHERE e1.ManagerId=e2.Id AND e1.Salary>e2.Salary
1.2查找比昨天温度高的所有日期的 Id
SELECT w1.Id FROM weather w1 JOIN weather w2 ON DATEDIFF(w1.RecordDate,w2.RecordDate)=1 # DATEDIFF函数用于返回两个日期的天数 WHERE w1.Temperature>w2.Temperature
1.3查找共用同一车站的所有公交路线
SELECT * FROM route R1, route R2 WHERE R1.stop=R2.stop
1.4查找价格相同但商品名称不同的商品信息
SELECT DISTINCT P1.name, P1.price FROM Products P1, Products P2 WHERE P1.price = P2.price AND P1.name != P2.name;
1.5删除 Person 表中所有重复的电子邮箱
DELETE p1 FROM Person p1, Person p2 WHERE p1.Email = p2.Email AND p1.Id > p2.Id