WITH语句中的SQL top 1

时间:2011-07-21 08:35:49

标签: sql sql-server-2008

我有一个使用WITH语句的SQL查询。 查询如下所示:

WITH topAge as (
  select top 1 * from ages
  order by age
)

select * from topAge where ageGroup = 1

我的问题是Where语句是否在top语句之后执行,因为此查询没有检索到任何记录,而我知道数据库中有应该检索的记录。

提前感谢您的帮助。

2 个答案:

答案 0 :(得分:3)

答案是:是的,ageGroup = 1谓词仅在选择top 1后应用。您的查询等同于此

select * from (
  select top 1 * from ages
  order by age
) where ageGroup = 1

你可能想要的是这个

select top 1 * from ages
where ageGroup = 1
order by age

答案 1 :(得分:2)

此查询:

select top 1 from ages order by age 

实际上并没有选择任何字段,这就是为什么它不起作用,将其改为:

SELECT TOP 1 age FROM ages ORDER BY age
--           ^^^