zoukankan      html  css  js  c++  java
  • 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.客户编号不同,保证不要客户与客户自己进行匹配。

  • 相关阅读:
    jenkins中通过Publish Over SSH将项目部署到远程机器上
    GitHub 开源的 MySQL 在线更改 Schema 工具【转】
    MySQL ProxySQL读写分离实践
    MySQL ProxySQL读写分离使用初探
    LVS+Keepalived实现DBProxy的高可用
    Redis Codis 部署安装
    CS 和 BS 的区别和优缺点(转)
    Linux的SOCKET编程详解(转)
    数据结构-深度遍历和广度遍历(转)
    社保相关
  • 原文地址:https://www.cnblogs.com/qiu-hua/p/13203674.html
Copyright © 2011-2022 走看看