• SQL---自连接(self join)


    针对相同的表进行的连接被称为“自连接”(self join)。

    那么为什么要把相同的一张表连接起来呢?一开始还是挺难理解的。把它想象成连接两张不同的表,这样容易理解一些。事实上,自连接还是有很多用处的。

    自连接的用途:

    1,在同一张表内进行比较

    例子:查找收入超过各自经理的员工的姓名

     Id | Name  | Salary | ManagerId 
    ----+-------+--------+-----------
     1  | Joe   | 70000  | 3         
     2  | Henry | 80000  | 4         
     3  | Sam   | 60000  | NULL      
     4  | Max   | 90000  | NULL 
    SELECT e1.Name AS employee_name
    FROM Employee AS e1, Employee AS e2
    WHERE e1.ManagerId=e2.Id
    AND e1.Salary>e2.Salary

    例子:查找比昨天温度高的所有日期的 Id

    | Id(INT) | RecordDate(DATE) | Temperature(INT) |
    +---------+------------------+------------------+
    |       1 |       2015-01-01 |               10 |
    |       2 |       2015-01-02 |               25 |
    |       3 |       2015-01-03 |               20 |
    |       4 |       2015-01-04 |               30 |
    SELECT w1.Id FROM weather w1 JOIN weather w2 on DATEDIFF(w1.RecordDate,w2.RecordDate)=1
    WHERE w1.Temperature>w2.Temperature

    2,找出列的组合

    例子:查找共用同一车站的所有公交路线

    SELECT * FROM route R1, route R2
    WHERE R1.stop=R2.stop;

    3,查找部分内容重复的记录

    例子:查找价格相同但商品名称不同的商品信息

    SELECT DISTINCT P1.name, P1.price
    FROM Products P1, Products P2
    WHERE P1.price = P2.price
    AND P1.name != P2.name;

    例子:删除 Person 表中所有重复的电子邮箱

    | Id | Email            |
    +----+------------------+
    | 1  | john@example.com |
    | 2  | bob@example.com  |
    | 3  | john@example.com |
    DELETE p1 FROM Person p1, Person p2
    WHERE p1.Email = p2.Email
    AND p1.Id > p2.Id
  • 相关阅读:
    R语言 which() 、 which.min() 、 which.max() 函数
    R rep() 函数
    R语言 一个向量的值分派给另一个向量
    R语言 sample抽样函数
    超参数 hyperparameters
    随机游走模型(Random Walk)
    随机数
    Lambda 函数与表达式
    static
    变量的申明定义
  • 原文地址:https://www.cnblogs.com/HuZihu/p/12244796.html
Copyright © 2020-2023  润新知