首页 > 解决方案 > 选择不同列ms sql server时的不同结果

问题描述

我正在使用 heidiSQL 查询多个数据库,并且在调整 SELECT 子句时获得了不同的结果。

当我执行以下查询时,数据库返回 501 条记录:

select *
from klantcontact 
inner join (
select top 448 ks.FIRNR,ROW_NUMBER() OVER(ORDER BY FIRNR DESC) as rownum
from klant ks) res
on klantcontact.KLANR = res.FIRNR

我实际上只需要两列。但是当我运行以下查询时,我得到了 526 条记录(仅更改了 select 子句):

select klantcontact.NAAM
from klantcontact 
inner join (
select top 448 ks.FIRNR,ROW_NUMBER() OVER(ORDER BY FIRNR DESC) as rownum
from klant ks) res
on klantcontact.KLANR = res.FIRNR

我认为这与'OVER'有关吗?

标签: sqlsql-serverwindow-functions

解决方案


在子查询中,您指定了前 448 个,但未在末尾指定任何 order by 子句。因此,每次运行查询时,返回的 448 行都有可能不同,每次都会给出不同的行数。

将您的查询更改为以下任一内容:

select klantcontact.NAAM
from klantcontact 
inner join (
select top 448 ks.FIRNR,ROW_NUMBER() OVER(ORDER BY FIRNR DESC) as rownum
from klant ks order by ks.FIRNR) res
on klantcontact.KLANR = res.FIRNR

或删除顶部的 448 子句。


推荐阅读