SQL SELF 和 INNER JOINS 在一个查询中

Posted

技术标签:

【中文标题】SQL SELF 和 INNER JOINS 在一个查询中【英文标题】:SQL SELF and INNER JOINS in one query 【发布时间】:2020-07-11 17:28:52 【问题描述】:

我有一个包含三个表的 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) AS 经理。

有没有办法可以将这两个查询组合成一个查询? 谢谢!

【问题讨论】:

请提供样本数据和期望的结果。 您可以添加表的架构吗? 【参考方案1】:

如果没有示例数据和表的架构,复制起来有点困难,但是...乍一看,我将在黑暗中试一试:

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;

【讨论】:

谢谢!这有助于澄清我对表中的 JOINS 的理解,这给我带来了如何将它们与 JOINS 结合到其他表中的麻烦。 以后最好给你的表命名。 “A”和“B”之类的东西很难理解。【参考方案2】:

这就像附加连接一样简单

使用更详细的名称最容易跟踪。

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;

【讨论】:

以上是关于SQL SELF 和 INNER JOINS 在一个查询中的主要内容,如果未能解决你的问题,请参考以下文章

sql JOINs - JOIN,INNER JOIN,LEFT JOIN,RIGHT JOIN,CROSS JOIN

带有两个 INNER JOINS 的 SQL 查询抛出 HAVING COUNT

Caml 多表关联查询

self join in sql server

SQL_连接(Join),内部连接(INNER JOIN),左连接(LEFT JOIN ),右连接(RIGHT JOIN)完整外部连接(FULL OUTER JOIN),自连接(Self JOIN)(

如何使用 JOINS 和嵌套 SELECT 优化此 SQL 查询?