簡體   English   中英

SQL SELF 和 INNER JOINS 在一個查詢中

[英]SQL SELF and INNER JOINS in one query

我有一個 SQL 數據庫,其中包含三個表:部門、角色和員工。 員工表有外鍵來引用部門和角色表中的主鍵,以及它自己表中的其他員工主鍵。 我目前有兩個單獨的查詢來訪問我需要的信息,一個使用兩個 INNER JOIN 來訪問部門和角色表,一個使用 SELF JOIN。

SELECT employee.id
     , employee.first_name
     , employee.last_name
     , role.title
     , role.salary
     , department.name AS Department 
  FROM employee 
  JOIN role 
    ON employee.role_id = role.id 
  JOIN department 
    ON role.department_id = department.id;

SELECT A.id
     , A.first_name
     , A.last_name
     , CONCAT(B.first_name, ' ', B.last_name) As Manager 
  FROM employee A
     , employee B 
 WHERE A.manager_id = B.id 
 ORDER 
    BY A.id;

我希望結果包括以下列:employee.id、employee.first_name、employee.last_name、role.title、role.salary、department.name AS Department 和 CONCAT(B.first_name, ' ', B.last_name)作為經理。

有沒有辦法可以將這兩個查詢組合成一個查詢? 謝謝!

如果沒有樣本數據和表的模式,復制起來有點困難,但是……乍一看,我會在黑暗中試一試:

SELECT A.id, A.first_name, A.last_name, role.title, 
       role.salary, department.name AS Department, 
       CONCAT(B.first_name, ' ', B.last_name) As Manager  
FROM employee A
JOIN employee B ON A.manager_id = B.id
JOIN role ON A.role_id = role.id 
JOIN department ON role.department_id = department.id
ORDER BY A.id;

這就像附加連接一樣簡單

使用更詳細的名稱最容易跟蹤。

SELECT employee.id,
       employee.first_name,
       employee.last_name,
       role.title,
       role.salary,
       department.name AS Department,
       CONCAT(manager.first_name, ' ', manager.last_name) AS Manager
FROM employee
         JOIN role
              ON employee.role_id = role.id
         JOIN department
              ON role.department_id = department.id
         JOIN employee as manager
              ON employee.manager_id = manager.id;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM