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

Mysql 如何使用SQL连接4个表以获得结果,mysql,sql,Mysql,Sql,这里是一个简单的数据库模式,根据该模式,我希望在所有员工中找到最高的工资,提供关于该员工a_id、a_name、b_区域的信息 表D只返回一个结果,我尝试返回employment_id与其他表链接,但它返回的结果不止一个。请检查下面我的查询,非常感谢: 您缺少表的联接条件。这应该可以满足你的需要 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

这里是一个简单的数据库模式,根据该模式,我希望在所有员工中找到最高的工资,提供关于该员工a_id、a_name、b_区域的信息

表D只返回一个结果,我尝试返回employment_id与其他表链接,但它返回的结果不止一个。请检查下面我的查询,非常感谢:


您缺少表的联接条件。这应该可以满足你的需要

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)

有几种方法:

子选择解决方案:


这个解决方案可能更有效。作为子选择,maxsalary将只返回一行

从D开始,然后根据需要连接其他表:

... D left join c on (d.employee_id = c.employee_id) left join a on ...
最高的薪水是:

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

请记住,如果有多个员工拥有最高工资,这将返回多个结果。

我认为您使用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);
这将输出一行,如下所示:
员工| id |工资| a |姓名| b |区域

如果我在最高工资中添加一个条件,它会是d.salary=从d中选择maxsalary,其中xxx=yyy@Radim Bačaw如果我想找到去年和今年工资的最大比较:MAXL_salary-N_salary?你的问题模型中没有这些数据,因此很难给你任何建议。也许这是一个不同的问题?实际上模式是一个修改过的模式,在表D下,它还有L_salary last year salary和N_salary this year salary然后MAXN_salary-L_salary将为您提供加薪最高的记录。因此,这将类似于m_salary=选择MAXN_salary-L_salary?如果我想找到最大的薪资,即去年和今年薪资的比较:MAXL_salary-你的薪水是多少?
... where salary = (select max(salary) from d)
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