SQL Server ROW_NUMBER当您不知道列名时,请加入+

时间:2013-05-30 17:13:10

标签: sql sql-server left-join row-number

我正在编写一个页面,它将创建一个查询(对于非db用户)并创建查询并运行它返回结果。

我正在使用row_number来处理自定义分页。

当我不知道需要返回的特定列时,如何在子查询中执行左连接和row_number。我尝试使用*,但我收到错误

  

多次指定了列''

这是我试过的查询:

SELECT * FROM 
  (SELECT ROW_NUMBER() OVER (ORDER BY Test) AS ROW_NUMBER, *
   FROM table1 a
   LEFT JOIN table2 b 
   ON a.ID = b.ID) x
WHERE ROW_NUMBER BETWEEN 1 AND 50 

2 个答案:

答案 0 :(得分:0)

无论row_number()调用如何,您的查询都将在SQL Server中失败。 *会返回所有列,包括a.idb.id。这两者都有相同的名称。这适用于查询,但对于子查询,所有列都需要不同的名称。

您可以在row_number()子句中使用“带常量的子查询”,使用order by进行任意排序:

SELECT * FROM 
  (SELECT ROW_NUMBER() OVER (ORDER BY (select NULL)) AS ROW_NUMBER, *
   FROM table1 a
   LEFT JOIN table2 b 
   ON a.ID = b.ID) x
WHERE ROW_NUMBER BETWEEN 1 AND 50 ;

这将删除对基础列名的依赖(假设没有名称为ROW_NUMBER)。

答案 1 :(得分:0)

试试这个sql。它应该工作。

SELECT * FROM 
  (SELECT ROW_NUMBER() OVER (ORDER BY a.Test) AS ROW_NUMBER, a.*,b.*
   FROM table1 a
   LEFT JOIN table2 b 
   ON a.ID = b.ID) x
WHERE ROW_NUMBER BETWEEN 1 AND 50