这是一个有效的SQL查询吗?

时间:2012-05-18 14:43:47

标签: sql

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

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 个答案:

答案 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语句,因此您将获得更多可选的执行计划