SQL 如何做到 In LIKE 功能
舉例:
有一個Table1
ID
AA001BB
AA002BB
AA003CC
AA004CC
AA004DD
AA006DD
還有 Table2
ID
001
002
004
想要實現
select * from table1 where ID likein (select '%'+ID+'%' from table2)
得到以下結果
ID
AA002BB
AA003CC
AA004CC
AA004DD
比較高效做法 exists
select * from table1 t1
where exists(select 1 from table2 t2 where t1.id like '%' + t2.id + '%')
你知道嘛?
你正在做一個很操主機的寫法。
而且,你的範例也太奇特了。
明明是找
001
002
004
但你的結果是001的沒出現,但出現了003!!!!!
這樣的語法結果我辦不到啊......
回來正題
一般來說,下LIKE的語法,能盡量不要用就不要用。
除非可以保証資料筆數不高。
因為LIKE的用法是會全表搜尋的。用在筆數多的表上是很可怕的事。
更不要說還要加上IN的做法。
不過還是告訴你
一般來說,我會在程式處理這樣的事。
程式兩表查尋區分法。
先將要查的資料取出後。再用如下的語法處理
field LIKE '001' OR field LIKE '002' OR field LIKE '004'
正則語法
field REGEXP '001|002'
其它還有許多應用的方式,但一般並不建議這樣處理。
安全點最好還是另外開個欄位直接用IN並加索引會比較安全。
是這樣嗎?
SELECT *
FROM TABLE1 T1
WHERE T1.ID IN
(SELECT S1.ID FROM TABLE1 S1 WHERE S1.NAME LIKE '林%')