0

这只是一个例子,我正在做类似的事情,它将获取数千条记录。

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) 

基本上在这,我想只抓取最近检查年份的记录

4

4 回答 4

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
于 2012-05-18T14:48:04.330 回答
0

此外,查询优化器更喜欢内部连接而不是嵌套的选择语句,因此您将获得更多可选的执行计划

于 2012-05-18T15:26:12.927 回答
0

aF. 的回答是正确的,但我想我会提出一个更清楚地表达您的意图的解决方案:

select *
from zoodb as TblA
where latest_checkup = (
    select max(latest_checkup)
    from zoodb
    where animal_id = TblA.animal_id);

缺少 [inner join (subselect)] 也意味着如果您将来需要添加额外的约束,它不会变得太乱。

于 2012-05-18T15:21:17.217 回答
0
SELECT * FROM 
(SELECT * FROM zoodb) As TblA 
....

不需要这个子查询。在FROM外部查询中可以处理它!

SELECT * 
FROM zoodb AS TblA
... 

其余的看起来不错!

编辑:

正如 aF 指出的那样,您不能从内部连接子查询中引用 TblA(参见 aF 的答案)。

于 2012-05-18T14:50:56.747 回答