选择子查询

时间:2018-03-09 07:41:54

标签: mysql select subquery left-join

我从MySQL (Test DB)安装了TestDB,我想做一些基本的查询。其中之一是:给我每个员工的薪水。工资表包含员工在过去和现在所拥有的每一份工资的清单。我只想要新手的工资,所以最高的是“from_date”。我已经成功地将Join两张桌子放在了一起,我已经设法给了我最高薪的eache员工和他们的员工编号。但我不能让他们在一起。我在网上找不到任何东西。 Maby我只是不知道要搜索什么。

无论如何,这就是我提出的:

为每个emp_no选择最高薪水:

select emp_no, max(from_date) from salaries group by emp_no

为每个员工选择最高薪水,并将其与其他数据联系起来(这个不起作用):

select * from employees e
LEFT JOIN salaries s
ON e.emp_no = s.emp_no
where s.from_date=(select max(from_date) from salaries group by emp_no);

这是EER:

EER

1 个答案:

答案 0 :(得分:1)

如果您想获得每位员工的最新薪水,请将salaries表加入子查询:

SELECT e.*, s1.*
FROM employees e
LEFT JOIN salaries s1
    ON e.emp_no = s1.emp_no
INNER JOIN
(
    SELECT emp_no, MAX(from_date) AS max_from_date
    FROM salaries
    GROUP BY emp_no
) s2
    ON s1.emp_no    = s2.emp_no AND
       s1.from_date = s2.max_from_date;