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資料庫淪為新一輪勒索軟體攻擊目標