我正在编写一个页面,它将创建一个查询(对于非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
答案 0 :(得分:0)
无论row_number()
调用如何,您的查询都将在SQL Server中失败。 *
会返回所有列,包括a.id
和b.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