查询行号

时间:2015-09-10 16:56:40

标签: sql-server database

此查询返回5个相同的产品,因为有5个关键字与最终产品相关联:

SELECT
  products.field1,
  products.field2
FROM products,
     keywords
WHERE products.itemnum = keywords.itemnum
AND products.itemnum = 123
ORDER BY products.field1, products.field2

如果我放了" distinct"在" select"之后,我得到1个结果,这就是我想要的。

然而,当我设置我的查询时:

SELECT
  *
FROM (SELECT
  ROW_NUMBER() OVER (ORDER BY products.field1, products.field2) AS rownum,
  products.field1,
  products.field2
FROM products,
     keywords
WHERE products.itemnum = keywords.itemnum
AND products.itemnum = 123) AS qryresults
WHERE rownum >= 1
AND rownum <= 20

我再次获得5个相同的产品。似乎没有任何地方可以放置一个&#34; distinct&#34;声明将其限制为1个结果。我确定原因是通过添加行号,不会产生结果&#34; distinct&#34;了。

我使用此查询中显示的技术将潜在的大型搜索结果限制为一次只有20条记录,这大大减少了开销并加快了查询速度。因此,如果有100,000个结果,我可以轻松地将其设置为返回记录90,000-90,020,例如。

MySQL内置了这种东西,但是使用MS SQL,这就是解决方法。

但是,当我组合关键字表时,我无法弄清楚如何使其工作。

如果我用列表替换*,那么我会收到错误:

The multi-part identifier could not be bound.

我不确定还有什么可以尝试的。有没有办法纠正这个?

谢谢。

0 个答案:

没有答案