0

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

row_number用来处理自定义分页。

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

列“”被多次指定

这是我尝试的查询:

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 
4

2 回答 2

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)。

于 2013-05-30T17:43:09.167 回答
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 
于 2013-06-01T14:32:16.783 回答