假设我需要在每个动物园中找到最古老的动物。这是一种典型的最大组查询。只是这里有一个复杂之处:斑马和长颈鹿存储在不同的表中。要获得所有动物的列表,无论是长颈鹿还是斑马,我可以这样做:
(SELECT id,zoo,age FROM zebras
UNION ALL
SELECT id,zoo,age FROM giraffes) t1
然后给定t1
,我可以构建一个典型的最大组查询:
SELECT t1.*
FROM t1
JOIN
(SELECT zoo,max(age) as max_age
FROM t1
GROUP BY zoo) t2
ON (t1.zoo = t2.zoo)
显然我可以存储t1
为一个临时表,但是有没有一种方法可以在一个查询中完成所有这些操作,而不必重复t1
? (请不要讨论对表设计的修改;我想集中讨论处理子查询结果的问题。)