下面是我写的一条查询第n行的记录,第1条查询:
SELECT * FROM  TableName WHERE ID=(
SELECT A.ID FROM (Select Top n * From TableName) AS A
LEFT OUTER JOIN (Select Top n-1 * From TableName) AS B ON B.ID=A.ID
WHERE B.ID IS NULL )当我去掉第一条语句SELECT,如第2条查询:SELECT A.* FROM (Select Top n * From TableName) AS A
LEFT OUTER JOIN (Select Top n-1 * From TableName) AS B ON B.ID=A.ID
WHERE B.ID IS NULL 想象的结果会是第n条记录,但我错了,查询返回的结果是1到n条记录。
我再修改语句成,第3条查询:SELECT A.* ,B.* FROM (Select Top n * From TableName) AS A
LEFT OUTER JOIN (Select Top n-1 * From TableName) AS B ON B.ID=A.ID
WHERE B.ID IS NULL 
返回的是只是第n条记录,与我要的结果基本相似,但多了个B.* 呵呵问大家,如何理解第2,3条查询语句??

解决方案 »

  1.   

    看到有个网友这样写:
    select  *   
    from  (select  top  n *  from  yourtable)  aa   
    where  not  exists(select  *  from  (select  top  n-1  *  from  yourtable)  bb  where  aa.id=bb.id)
    但返回的结果也是1到n行记录,有时是n比较大的时候,只能返回1到m(m<n)条记录。不解!!!
      

  2.   

    select top 1 * from tablename where id not in(select top n-1 id from tablename)