`
ych19850810
  • 浏览: 32437 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

奇怪的AS400数据库

阅读更多
select distinct userpo1_.ID as ID60_, userpo1_.CUST_ID as CUST2_60_, userpo1_.CARD_TYPE as CARD3_60_, userpo1_.USER_CODE as USER4_60_, userpo1_.LOGIN_PASS as LOGIN5_60_, userpo1_.LOGIN_NAME as LOGIN6_60_, userpo1_.USER_NAME as USER7_60_, userpo1_.GENDER as GENDER60_, userpo1_.CARD_CODE as CARD9_60_, userpo1_.IDENTITY as IDENTITY60_, userpo1_.TEL1 as TEL11_60_, userpo1_.TEL2 as TEL12_60_, userpo1_.REC_FLAG as REC13_60_, userpo1_.CHK_FLAG as CHK14_60_, userpo1_.OPT_TYPE as OPT15_60_, userpo1_.OPT_USERID as OPT16_60_, userpo1_.CHK_USERID as CHK17_60_, userpo1_.LASTUPDATE as LASTUPDATE60_, userpo1_.TEMP1 as TEMP19_60_, userpo1_.TEMP2 as TEMP20_60_ from RUN08110.T_ACCUSR accountuse0_, RUN08110.T_USRINFO userpo1_, RUN08110.T_CUSTOMER customerpo2_ where userpo1_.CUST_ID=customerpo2_.ID and accountuse0_.USER_ID=userpo1_.ID and accountuse0_.CHK_FLAG>0 and userpo1_.IDENTITY>3 and (customerpo2_.CUST_CODE like '%0000000009%') and userpo1_.IDENTITY=7 and accountuse0_.REC_FLAG=1 fetch first 10 rows only
就是这么一个由Hibernate转换出来的SQL语句 在IBM AS400数据库中执行就出现了问题,问题是由于有了fetch以后distinct失效了,本来这条语句的目的是先distinct取出不重复的记录,然后从不重复的记录中取出前面的10条记录,但是在AS400中执行以后结果却取出了重复的结果,其实就是distinct失效了。我认为这应该算这个数据库产品的一个BUG,后来我也解决了问题。解决问题的方法是改写了上面这条语句,先用户distinct取出了不重复的记录,语句变成这样的了:
select  * from run08110.T_USRINFO where id in(select distinct userpo1_.ID as ID60 from RUN08110.T_ACCUSR accountuse0_, RUN08110.T_USRINFO userpo1_, RUN08110.T_CUSTOMER customerpo2_ where userpo1_.CUST_ID=customerpo2_.ID and accountuse0_.USER_ID=userpo1_.ID and accountuse0_.CHK_FLAG>0 and userpo1_.IDENTITY>3 and (customerpo2_.CUST_CODE like '%0000000009%') and userpo1_.IDENTITY=7 and accountuse0_.REC_FLAG=1) fetch first 10 rows only
也就是先用子查询找到不重复的记录,然后再从不重复的记录中取出10条,问题得到解决了,而且查询速度得到了大幅的提升。
分享到:
评论

相关推荐

    精彩编程与编程技巧-vb6在处理数据库时的几个“BUG”...

    当处理超过300MB的DBF文件时,可能会遇到一些奇怪的行为。例如,在下面的例子中,尝试通过索引定位到特定记录: ```vb Dim db As Database Dim rs As Recordset Dim Num As Long Set db = OpenDatabase(App.Path & ...

    pymysql 开启调试模式的实现

    今天在排查线上一个奇怪的数据库连接问题,所以打开了 pymysql 的源码在阅读,发现 pymysql 在其 connections 模块里内置了一个 DEBUG 变量用于控制是否开启调试模式,是的话,会将当前连接的操作以及报文内容都打印...

    win7 iis7.5 乱码 和 解析不了ASP的ADO连接数据库 的解决方法

    那时候觉得这个文件奇怪 于是直接删除了,然后运行自己的ASP文件发现问题转化了 出现了ODBC连接错误,不过还是一大堆的乱码。。好了废话不说了,接着解决第二个问题第二个问题是因为是ASP错误500-100编码问题 ,...

    todo_challenge

    你可以使用任何你觉得舒服的 JavaScript 级别——纯 JS、jQuery、Angular,或者任何你想尝试的奇怪而美妙的框架。 DogeScript 的加分 脚步 填写您本周的学习计划自我审查: : Fork 这个 repo,并克隆到你的本地...

    to_do_avenger:第 7 周周末单人挑战,使用 JavaScript 完成列表

    你可以使用任何你觉得舒服的 JavaScript 级别——纯 JS、jQuery、Angular,或者任何你想尝试的奇怪而美妙的框架。 DogeScript 的加分 脚步 填写您本周的学习计划自我审查: : Fork 这个 repo,并克隆到你的本地...

    To-do-challenge

    你可以使用任何你觉得舒服的 JavaScript 级别——纯 JS、jQuery、Angular,或者任何你想尝试的奇怪而美妙的框架。 DogeScript 的加分 脚步 填写您本周的学习计划自我审查: : Fork 这个 repo,并克隆到你的本地...

    MTK软件说明

    - 设置数据库路径:通过`config->set database path`指定数据库文件的位置。 - 设置模式为`logging`:在`control->mode`中选择`logging`模式。 - 设置COM口:选择正确的串口。 - 开启连接:确保Catcher处于待命...

    关于ASP生成伪参数技巧

    奇怪之下看了看,原来是按照数据库ID的自动编号规律进行链接的~~ 闲暇之余弄了下面这个东东,希望对大家在以后的编写ASP程序中有所帮助! <% ‘//生成指定位数的随机数字 ‘//也可以用Guidy写的iXuEr_Rnd_...

    ASP.NET:设置页面buffer引出来的问题

    f=9#12”)的时候,发现在IE里面,跳转之后的页面忽略了#之后的内容,奇怪的是在同一页面向自己Redirect的时候,这个问题就不会存在,百思不得其解,有病乱投医吧,上网狂搜了一把,有人说设置页面Buffer为false可能...

    PHP has encountered a Stack overflow问题解决方法

    我就感觉奇怪了,新站没人访问的,怎么可能会溢出。 好吧去discuz官方论坛找找解决方法。 找到的第一解决方法,更新后台缓存,结果不行。接下来检查数据库配置文件,也没有错误。检查php权限也没有错误。 discuz官网...

Global site tag (gtag.js) - Google Analytics