• Mysql基础(十一):Self Join


    Summary: 如何使用 MySQL self join 进行表的 自己对自己的join操作。.

    前面的教程,已经教过join语法,都是两个表的之间的操作,特殊的,当一个表自己和自己进行join,那就需要self join语法了。

    在使用同一个表的行合并,就用到 self join 需要将表命名为可区分两个不同的表,然后就形成了两个表,这样就可以继承上节中介绍的两个表的所有join操作。

    MySQL self join 实例:

    在员工雇佣表内,不仅存了员工的信息,而且还有组织结构数据, The reportsto 列为员工的汇报上级领导。

     

     想得到员工的信息并且得到汇报上级的信息,恰恰用到了self join,信息在同一个表

    SELECT 
    CONCAT(m.lastname, ', ', m.firstname) AS 'Manager',
    CONCAT(e.lastname, ', ', e.firstname) AS 'Direct report'
    FROM
    employees e
    INNER JOIN
    employees m ON m.employeeNumber = e.reportsto
    ORDER BY manager;

    这里用的inner join 的self join,根据业务逻辑,最高领导人不会出现在这表里,为最高领导人没有领导,那么,我们用left join来解决这个问题。

    SELECT 
    IFNULL(CONCAT(m.lastname, ', ', m.firstname),
    'Top Manager') AS 'Manager',
    CONCAT(e.lastname, ', ', e.firstname) AS 'Direct report'
    FROM
    employees e
    LEFT JOIN
    employees m ON m.employeeNumber = e.reportsto
    ORDER BY manager DESC;

    用left join的self join,如果最高领导的为空,那么直接领导人为Top manager,

    实例2:

    找出同一城市的相同客户;

    SELECT 
    c1.city, c1.customerName, c2.customerName
    FROM
    customers c1
    INNER JOIN
    customers c2 ON c1.city = c2.city
    AND c1.customername > c2.customerName
    ORDER BY c1.city;

    1.城市作为共同信息

    2.客户编号不同,保证不要客户与客户自己进行匹配。

  • 相关阅读:
    GeoServer发布PostGIS数据库中的栅格数据
    CMD查看端口占用情况
    css选择器命名推荐
    css书写顺序
    css中浮动相关
    动态规划算法
    KMP算法 字符串匹配
    Java 反射
    分治(Divide-and-Conquer(P))算法
    图 结构
  • 原文地址:https://www.cnblogs.com/qiu-hua/p/13203674.html
Copyright © 2020-2023  润新知