t sql語句排序的程式bug

2022-04-01 05:17:24 字數 1760 閱讀 8078

最近同事處理乙個客戶發現乙個bug,在排序的時候出現問題:

可能是資料庫的bug

field002這裡有個」2008-03-02「的排序,其他都是按field002來排序,個別不是按field002排序。

執行語句

select

*from

(select

id,field001 

asfield001,field002 

asfield002,

(select

objname 

from

customer 

where

tbalias.field003

=id) 

asfield003,field003 

asfield003_id,

requestid, row_number() 

over

( order

bytbalias.field002 

asc) 

aspos 

--from

td tbalias  

where

exists

( select'x

'from

dd wb 

where

tbalias.requestid

=wb.id 

andwb.isdelete=0

andisfinished=0)) 

ast 

where

t.pos

>

0and

t.pos

<=

20以下可以解決按field002排序問題

1,不用分頁

2,將customer中的id唯一索引從改成非唯一索引

3,去掉(select objname from customer where tbalias.field003=id) as field003

但這些因為業務邏輯都不能去掉

看了他的執行計畫:在和customer 查詢時,是用的巢狀查詢,驅動表是td。按演算法是先從td表中查的一條資料,再和customer中比較得到出資料。

在百思不得其解後:最後修改了一下sql,將子查詢變成關聯查詢就好了,**如下:

select

*from

(select

id,field001 

asfield001,field002 

asfield002,

bb.objname  

asfield003,field003 

asfield003_id,

requestid, row_number() 

over

( order

bytbalias.field002 

asc) 

aspos 

--from

td tbalias left join customer  bb on tbalias.field003=bb.id

where

exists

( select'x

'from

dd wb 

where

tbalias.requestid

=wb.id 

andwb.isdelete=0

andisfinished=0)) 

ast 

where

t.pos

>

0and

t.pos

<=

20

MS SQL Server的T SQL語句(一)

最近面試碰到乙個sql server語句選擇題 建立乙個名為 customers 的新錶,同時要求新錶中包含表 clients 的所有記錄,sql語句是 選擇一項 a select into customers from clients b select into customers from cl...

SQL server中的T SQL語句

首先點選新建查詢 如下圖所示 建立資料庫 create database 資料庫名稱 使用資料庫 use 資料庫名稱 建立表 create table 表名 輸入完成執行時需選中 如果需要多條語句一起執行,則需要在後面 go 例如 create database 資料庫名稱 go use 資料庫名稱...

SQL server中的T SQL語句

首先點選新建查詢 如下圖所示 建立資料庫 create database 資料庫名稱 使用資料庫 use 資料庫名稱 建立表 create table 表名 輸入完成執行時需選中 如果需要多條語句一起執行,則需要在後面 go 例如 create database 資料庫名稱 go use 資料庫名稱...