# SQL msSQL ROW_NUMBER()+CHARINDEX()SQL問題 SQL子查詢 ---- ###### tags: `SQL` [可以做好多事情的SQL子查詢](https://ithelp.ithome.com.tw/articles/10219497) ## 搜尋 **!!舊搜尋法 不要再使用 有問題!!** 這是原本使用的搜尋 看起來很正常但如果加入搜尋法後就會有嚴重的問題 ### 搜尋範例1\(錯誤) ```sql= SELECT * FROM (SELECT ROW_NUMBER() OVER ( ORDER BY id ) AS row_id, * FROM [admin_basic] ) AS aTable WHERE CHARINDEX('o', admin_acc) > 0 AND row_id > 0 AND row_id <= 2 ORDER BY row_id ``` 首先要先知道資料庫中會被搜尋出來的筆數是多少 所以將`row_id` 條件移除 符合查詢的只有三筆資料 ```sql= SELECT * FROM (SELECT ROW_NUMBER() OVER ( ORDER BY id ) AS row_id, * FROM [admin_basic] ) AS aTable WHERE CHARINDEX('o', admin_acc) > 0 ```  ## 分頁 假設分頁是以下方式進行 那上方圖片再 顯示每頁2數資料下 應該是會有 兩頁 共三筆資料 **!! 以上是錯的思考法 !!** ``` 每頁2 筆資料的話 最大roe_id 與最小row_id 公式為以下 page_1 page_2 page_3 0=1-1*2 2 =2-1*2 4=3-1*2 2=1*2 4 =2*2 6=3*2 1 3 5 2 4 6 ``` ### 搜尋範例1\(錯誤) 輸出 輸出結果只有一筆資料 看 畫線處  ### 搜尋範例1\(錯誤) 原因 這是由於SQL 子查詢而出得問題 **錯誤產生的原因是因為 先排序後搜尋** **應該是要 先搜尋後排序** 所以應該是改成下面的排序方法  SQL 應該改成已下方式 ```sql= SELECT * FROM (SELECT ROW_NUMBER() OVER ( ORDER BY id ) AS row_id, * FROM [admin_basic] WHERE CHARINDEX('o', admin_acc) > 0 ) AS aTable WHERE row_id > 2 AND row_id <= 4 ORDER BY row_id ```  
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up