在MySQL中选择varchar的最大值

时间:2015-11-15 10:51:51

标签: mysql join subquery max

我有一个员工表和描述表,如下所示。

员工表:

empId    empName
================
 1       foo
 2       bar

说明表:

id  description empId
======================
1   test A      1
2   test B      1
3   test C      1
4   test D      2
5   test E      2
6   test F      1

我可以使用查询内容

加入并获取每位员工的最新说明
select e.empId, e.empName, d.description
from employee e
inner join description d on d.id=(select max(id) from description where empId=e.empId)

将返回所需的结果

empId        empName    description
===================================
1            foo        test F
2            bar        test E

但我想知道是否有其他方法可以在没有子查询的情况下获得相同的结果。

3 个答案:

答案 0 :(得分:0)

可以完成涉及GROUP BY的解决方案,但它涉及将原始查询包装在另一个选择中。它避免了查询选择最大ID。

SELECT * FROM (
SELECT e.empId, e.empName, d.description
 FROM employee e
 JOIN description d USING (empId)
 ORDER BY e.empId ASC, d.id DESC
) tmp GROUP BY empId

您的原始查询可以使用主键执行,其中此主键涉及临时表,可能还有文件排序,因此可能效果不佳。

答案 1 :(得分:0)

我不认为你可以在没有子查询的情况下做到这一点,但你可以改写为:

select e.empId,
       e.empName,
       (select description from description 
        where empId = e.empId 
        order by id desc limit 1) as description
from employee e

答案 2 :(得分:0)

SELECT DISTINCT e.empId, e.empName, d.description
FROM employee e
JOIN description d USING (empId)
join (
    SELECT MAX(d.id) as id
    FROM description d
    GROUP BY d.empId
) AS maxd ON maxd.id = d.id