最近同事處理乙個客戶發現乙個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 資料庫名稱...