我有一个员工表和描述表,如下所示。
员工表:
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
但我想知道是否有其他方法可以在没有子查询的情况下获得相同的结果。
答案 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