简体   繁体   English

如何使用SQL联接4个表以获得结果

[英]How can I join 4 tables using SQL to get a result

Here is a simple database schema, according to the schema, I would like to find the highest salary among all employees, presenting the information about that employee (a_id, a_name, b_area). 这是一个简单的数据库架构,根据该架构,我想在所有员工中找到最高的薪水,并提供有关该员工的信息(a_id,a_name,b_area)。

There will be only one result return from table D and I try to return the employment_id to link with other tables but then it returns more than 1 result. 表D仅返回一个结果,我尝试返回job_id以与其他表链接,但随后它返回多个结果。 Please check my query underneath, thank you very much :) 请在下面检查我的查询,非常感谢:) 在此处输入图片说明

SELECT
     a.a_id,
     a.a_name,
     b.b_area 
FROM
     A a, B b, C c 
LEFT JOIN (SELECT d.employee_id, MAX(d.salary) FROM D d)
     ON d.employee_id= c.employee_id;

Start with D, then join the other tables as needed: 以D开头,然后根据需要加入其他表:

... D left join c on (d.employee_id = c.employee_id) left join a on ...

And the highest salary bit would be something like: 最高薪水会是这样的:

... where salary = (select max(salary) from d)

Keep in mind that this will return multiple results if there is more than one employee having the maximum salary. 请记住,如果有多于一名雇员的最高薪水,这将返回多个结果。

You miss a join condition for your tables. 您错过了表的联接条件。 This should do what you need. 这应该做您需要的。

SELECT a.a_id, a.a_name, b.b_area 
FROM C
JOIN A ON a.a_id = c.a_id
JOIN B ON b.b_id = c.c_id
JOIN D ON d.employee_id = c.employee_id    
WHERE d.salary = (SELECT max(salary) FROM D)

There are several ways: 有几种方法:

Subselect-Solution: 子选择的解决方案:

 SELECT A.a_name
       ,B.b_area
       ,maxsalary.MaxSal
   FROM
      (
        SELECT D.employee_id
              ,MAX(D.Salary) as MaxSal
          FROM D
      GROUP BY D.employee
      ) maxsalary
    INNER JOIN C
            ON C.employee_id = maxsalary.employee_id
    INNER JOIN B
            ON C.b_id = B.b_id
    INNER JOIN A
            ON C.a_id = A.a_id

This solution might be more performant. 此解决方案可能更有效。 As SUBSELECT maxsalary will return just one row. 由于SUBSELECT maxsalary将仅返回一行。

I think you use HAVING Clause, 我认为您使用HAVING子句,

SELECT a.a_id, a.a_name, b.b_area FROM A a, B b, C c LEFT JOIN D d ON c.employee_id = d.employee_id
GROUP BY d.salary
HAVING MAX(d.salary);
SELECT D.*, a.a_name, b.b_area FROM D
LEFT JOIN c ON d.employee_id = c.employee_id
LEFT JOIN a ON a.a_id = c.a_id
LEFT JOIN b ON b.b_id = c.a_id
ORDER BY D.salary DESC LIMIT 1

This will output one row as: 这将输出一行为:
employee_id | employee_id | salary | 薪水| a_name | a_name | b_area b_area

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM