这只是一个例子,我正在做类似的事情,将抓住数千条记录。
SELECT * FROM
(SELECT * FROM zoodb) As TblA
INNER JOIN
(SELECT animal_ID, Max(checkup_year) AS latest_checkup FROM TblA GROUP BY animal_ID) as TblB
ON (TblA.animal_ID = TblB.animal_ID) AND (TblA.checkup_year = TblB.latest_checkup)
基本上,在这里,我想只获取最新检查年度的记录
答案 0 :(得分:3)
您的查询无效。
但你可以这样做:
SELECT * FROM zoodb z
INNER JOIN (SELECT animal_ID, Max(checkup_year) AS latest_checkup
FROM zoodb
GROUP BY animal_ID) aux ON aux.animal_ID = z.animal_ID AND aux.latest_checkup = z.checkup_year
答案 1 :(得分:0)
SELECT * FROM
(SELECT * FROM zoodb) As TblA
....
不需要此子查询。外部查询中的FROM
可以处理它!
SELECT *
FROM zoodb AS TblA
...
其余的看起来很好!
编辑:
正如aF指出的那样,你不能从内连接子查询中引用TblA(参见aF的答案)。
答案 2 :(得分:0)
aF。答案是正确的,但我想我会提出一个更清楚地表达你意图的解决方案:
select *
from zoodb as TblA
where latest_checkup = (
select max(latest_checkup)
from zoodb
where animal_id = TblA.animal_id);
缺少[内连接(subselect)]也意味着如果你将来需要添加额外的约束,它不会太乱。
答案 3 :(得分:0)
此外,查询优化器更喜欢内部联接到嵌套的select语句,因此您将获得更多可选的执行计划