博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
主键思维定势导致的惨案
阅读量:7103 次
发布时间:2019-06-28

本文共 1089 字,大约阅读时间需要 3 分钟。

 

主键思维定势导致的惨案

 

       记录一下前段时间工作中遇到的问题,希望这血淋淋的惨案可以警醒与我有相同思维定势的网友。

       众所周知一般情况下数据库中的记录是按照主键(主键是整数)递减排列的

       select * from Person.Address

   

 

这种情况下我们直接使用top 100),自然会正确的返回前100条记录

select top (100) * from Person.Address

所以,我就一直自认为下面的嵌套子查询会返回前100条记录

SELECT top (100) [AddressID]

      ,[AddressLine1]

      ,[AddressLine2]

      ,[City]

      ,[StateProvinceID]

      ,[PostalCode]

      ,[rowguid]

      ,[ModifiedDate]

  FROM [AdventureWorks].[Person].[Address]

   where stateprovinceid in

(

    select StateProvinceID from Person.Address  where AddressID>10

)

 

就是这个思维定势导致的错误,令我郁闷了相当长的时间,一直以为是hibernate导致的错误,从没有想到是这个原因!

 

正确的写法如下

SELECT  [AddressID]

      ,[AddressLine1]

      ,[AddressLine2]

      ,[City]

      ,[StateProvinceID]

      ,[PostalCode]

      ,[rowguid]

      ,[ModifiedDate]

  FROM [AdventureWorks].[Person].[Address]

   where AddressID in

(

    select top(100) AddressID from Person.Address  where AddressID>10 order by AddressID

)

 

 

SELECT top (100) [AddressID]

      ,[AddressLine1]

      ,[AddressLine2]

      ,[City]

      ,[StateProvinceID]

      ,[PostalCode]

      ,[rowguid]

      ,[ModifiedDate]

  FROM [AdventureWorks].[Person].[Address]

   where [AddressID] in

(

    select [AddressID] from Person.Address  where AddressID>10

)

order by AddressID

转载地址:http://ilkhl.baihongyu.com/

你可能感兴趣的文章
Skype For Business Server 2015 离线消息
查看>>
js 获取checkbox选中项目
查看>>
VC6使用技巧
查看>>
pdf文档如何转换成txt文档
查看>>
DELL32位诊断工具PEDIAGS使用
查看>>
产品经理的麻烦地图
查看>>
如何通过刷百度指数来提高网站的权重
查看>>
轻量级HTTP服务器Nginx(常用配置实例)
查看>>
FAT32文件系统
查看>>
Mysql存储过程分析
查看>>
文件系统权限 -- 学习笔记
查看>>
windows2008域上装oracle10gR2
查看>>
mac终端命令大全介绍(稍加整理)
查看>>
web虚拟键盘VirtualKeyboard
查看>>
我的友情链接
查看>>
安装独立根CA(2)
查看>>
全能通用系列T600+产品的十大特点:
查看>>
我的友情链接
查看>>
C++继承:公有,私有,保护
查看>>
创建可扩展性系统-2
查看>>