sql - 选择不同列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'有关吗?
解决方案
在子查询中,您指定了前 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 子句。
推荐阅读
- javascript - 递归函数不返回
- c# - AutoFac - 通过继承对象的枚举创建工厂
- node.js - ReferenceError: indexproduct 未定义
- c++ - 如何从同一输入行获得不同的用户输入?
- swift - 变量 UILabel 名称
- virtualbox - VirtualBox VM 导入 Oracle 云基础设施后更改 MAC 地址
- c++ - 2D 阵列不正确的值问题(粒子光子)
- android - android离线时如何调用API?
- python - 按钮释放时的 Kivy 功能范围(小部件树)
- javascript - 如何为相同的键但不同的值创建单个数组