標籤:

MySQL |Self Join

MySQL |Self Join

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

前面的教程,已經教過join語法,都是兩個表的之間的操作,特殊的,當一個表自己和自己進行join,那就需要self join語法了。

在使用同一個表的行合併,就用到 self join 需要將表命名為可區分兩個不同的表,然後就形成了兩個表,這樣就可以繼承上節中介紹的兩個表的所有join操作。

MySQL self join 實例:

在員工僱傭表內,不僅存了員工的信息,而且還有組織結構數據, The reportsto 列為員工的彙報上級領導。

想得到員工的信息並且得到彙報上級的信息,恰恰用到了self join,信息在同一個表

SELECT nCONCAT(m.lastname, , , m.firstname) AS Manager,nCONCAT(e.lastname, , , e.firstname) AS Direct reportnFROMnemployees enINNER JOINnemployees m ON m.employeeNumber = e.reportstonORDER BY manager;n

這裡用的inner join 的self join,根據業務邏輯,最高領導人不會出現在這表裡,為最高領導人沒有領導,那麼,我們用left join來解決這個問題。

SELECT nIFNULL(CONCAT(m.lastname, , , m.firstname),nTop Manager) AS Manager,nCONCAT(e.lastname, , , e.firstname) AS Direct reportnFROMnemployees enLEFT JOINnemployees m ON m.employeeNumber = e.reportstonORDER BY manager DESC;n

用left join的self join,如果最高領導的為空,那麼直接領導人為Top manager,

實例2:

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

SELECT nc1.city, c1.customerName, c2.customerNamenFROMncustomers c1nINNER JOINncustomers c2 ON c1.city = c2.citynAND c1.customername > c2.customerNamenORDER BY c1.city;n

1.城市作為共同信息

2.客戶編號不同,保證不要客戶與客戶自己進行匹配。

推薦閱讀:

MySQL成勒索新目標 數據服務基線安全問題迫在眉睫
提高MySQL性能的7個技巧
MySQL |IN 操作符(13)
全球MySQL資料庫淪為新一輪勒索軟體攻擊目標

TAG:MySQL | MySQL入门 |