3 回答

TA貢獻1848條經驗 獲得超6個贊
select * from news where keys like '%機械廠%'
呵呵,你這么寫的,肯定只能用like,in是沒辦法做的,而且in的效率也不高。
如果真的想快一點,表內的數據很多那么就分批查詢,具體怎么分批,可以考慮分區,如果沒有明顯字段就hash分區,然后在每個分區中分別查詢,這樣速度就上來了,而且查詢結果頁相對出來的快一點。
如果一定要用in,那么你這里只能是根據逗號將keys字段分成幾個字段,然后在分別用in來做,不過這樣做的話查詢的sql不會太短,我估計還沒有like快呢。

TA貢獻1784條經驗 獲得超2個贊
你這樣構造in的范圍不對。你這樣是把in后面處理成一個字符串了。而in后面跟的應該是一個范圍。
你可以自己寫一個返回數據集的函數來將aa.ddid值處理成in的范圍,
類似于:
假設函數:
ft01(nvarchar(1000))
returns
table
tb
(val
int)。
那么,
這樣更新里面子查詢的in條件:
where
id
in
(select
val
from
ft01(aa.ddid))。
另外,
此解決方法只是從in條件上來說。
如果子查詢只有1條記錄,in和=是沒有區別,如果子查詢有多條記錄,用=會出錯的,所以in是無論只查詢有多少條記錄都可以使用,而=只有當子查詢只有1條記錄的時候才能使用。
in和exists理解上其實是差不多,但對數據庫而言,in的執行順序是先執行只查詢條件,然后把記錄和外查詢核對,找符合條件的。
而exists是先執行外查詢,再執行子查詢,找到外查詢記錄后和只查詢對比符合條件的,如果外查詢和子查詢的條目數差異很大,那么效率相差很明顯的。

TA貢獻1934條經驗 獲得超2個贊
select * from news where keys in ('機械廠')
如果是多個
select * from news where keys in ('機械廠','機械工具')
- 3 回答
- 0 關注
- 157 瀏覽
添加回答
舉報