台灣最大程式設計社群網站
線上人數
772
 
會員總數:245598
討論主題:189304
歡迎您免費加入會員
討論區列表 >> MS SQL >> SQL語法:資料庫中若有該筆資料,就回傳說有(快速查找)
[]  
[我要回覆]
1
回應主題 加入我的關注話題 檢舉此篇討論 將提問者加入個人黑名單
SQL語法:資料庫中若有該筆資料,就回傳說有(快速查找)
價值 : 20 QP  點閱數:1366 回應數:5

樓主


初學者
15 119
1590 323
發送站內信

我有一個資料表,內有數百萬筆,若想找某"代號" 在某一期間有無資料,可以用Count(*) 的方式,如下



如查 代號="1101",在 日期=20100228 時,存在有 51筆
查 代號="1101",在 日期=20130106 時,存在有 5筆
查 代號="2002",在 日期=200803026 時,存在有 17筆

但上式若要連續查1萬次的話,速度真的很慢。(花近1小時)
其實我並不想知道它到底有幾筆(如51筆),我只想知道,若有的話,就直接回傳說"有"(或是1),若沒有,就回傳說"沒有"(或是-1)
請問要如何"快速"查找有無該筆資料呢?

本篇文章發表於2014-01-14 07:45
== 簽名檔 ==
--
別忘捐VP感謝幫助你的人 新手會員瞧一瞧
1樓
回應

pilipala
檢舉此回應

用 EXISTS 去判斷存不存在,只要找到符合資料就不會再繼續往下找
http://msdn.microsoft.com/zh-tw/library/ms188336.aspx
本篇文章回覆於2014-01-14 07:50
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
2樓
作者回應


檢舉此回應
謝謝 pilipala 的回答
我看了連結,但還是有點不太會下SQL
為了方便看,用如下範例

sql = SELECT Count(*) FROM dbo.dt基本資料
WHERE(代號='1101' AND
上市日期<='20080131' AND
最後交易日>='20080331')

用exist 要怎麼寫呢?
本篇文章回覆於2014-01-14 08:05
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
3樓
最有價值解答

pilipala
檢舉此回應

請參考看看 ~~

本篇文章回覆於2014-01-14 08:18
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
4樓
作者回應


檢舉此回應
感謝,行了,pilipala 大大果然強。
本篇文章回覆於2014-01-14 08:20
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
5樓
回應

傑客
檢舉此回應
Dim sql = "SELECT Count(*) FROM dbo.dt基本資料 " +
" WHERE 代號='" + s代號 + "' AND (上市日期<='" + s日期 + "' AND 最後交易日>='" + s日期 + "')"


提個疑問 ,
我想 , 一支股票的上市日期應該只有一個, 且不可能再改變
所以上述的查詢句中 ,“ 上市日期<='" + s日期 “ 似乎是無必要的
而且用 <= 也會拖累查詢時間

本篇文章回覆於2014-01-14 14:00
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
   
1

回覆
如要回應,請先登入.