iT邦幫忙

0

SQL 如何做到 In LIKE 功能?

sql

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
4
暐翰
iT邦大師 1 級 ‧ 2021-01-12 08:31:52
最佳解答

比較高效做法 exists

select * from table1 t1 
where exists(select 1 from table2 t2 where t1.id like '%' + t2.id + '%')

SQL Server 2017 | db<>fiddle

1
listennn08
iT邦高手 8 級 ‧ 2021-01-11 15:04:15

不知道你用哪種 SQL 以 SQLServer 為例

select t1.id from t1, t2 where t1.id like '%' + t2.id +'%';

demo

6
浩瀚星空
iT邦超人 1 級 ‧ 2021-01-11 15:10:07

你知道嘛?
你正在做一個很操主機的寫法。

而且,你的範例也太奇特了。
明明是找

001
002
004

但你的結果是001的沒出現,但出現了003!!!!!

這樣的語法結果我辦不到啊......

回來正題

一般來說,下LIKE的語法,能盡量不要用就不要用。
除非可以保証資料筆數不高。

因為LIKE的用法是會全表搜尋的。用在筆數多的表上是很可怕的事。
更不要說還要加上IN的做法。

不過還是告訴你
一般來說,我會在程式處理這樣的事。

程式兩表查尋區分法。

先將要查的資料取出後。再用如下的語法處理

field LIKE '001' OR field LIKE '002' OR field LIKE '004'

正則語法

 field REGEXP '001|002'

其它還有許多應用的方式,但一般並不建議這樣處理。
安全點最好還是另外開個欄位直接用IN並加索引會比較安全。

小MIS iT邦新手 5 級 ‧ 2021-01-12 08:48:40 檢舉

感謝,但這是前人的遺物 QQ

1
japhenchen
iT邦大師 1 級 ‧ 2021-01-11 15:51:03

是這樣嗎?

SELECT * 
FROM TABLE1 T1
WHERE T1.ID IN 
(SELECT S1.ID FROM TABLE1 S1 WHERE S1.NAME LIKE '林%')
小MIS iT邦新手 5 級 ‧ 2021-01-12 08:49:20 檢舉

感謝,類似但有差異

IN另一個表

SELECT * 
FROM TABLE1 T1
WHERE T1.ID IN 
(SELECT S2.ID FROM TABLE2 S2 WHERE S2.NAME LIKE '林%')

我要發表回答

立即登入回答