LIKE operator with a SUBQUERY

2012-01-06 10:43 pm

Using the LIKE operator with a SUBQUERY!!

how do i issue the query that will use the values coming from another table as patterns...

something like this...
select field1 from table1 where field2 like '%(select pattern1 from table2)%'

where:
table1
field1 field2
1 ABC
2 BCD
3 DDD
4 BBB

table2
pattern1
A
C
F

and so result set will be:
field1
1
2


is this possible? and if so, what is the correct SQL ? :(

回答 (1)

2012-01-07 3:54 am
✔ 最佳答案
Like 之後的,是一個string,以substring作matching,但係你的(select x from y)所回傳是一個list/table,不可能實現。
如果用subquery,能配以IN。
用法是 select xxx from xx where field in (select xx)
以你現時的結構,可能不可以單一句完成。
(方法1)可以用filter作實現。
(方法2)改一 改個結構,例如加一個table3,基本上是重複存放table1的資料,欄位會是field1,pattern,拆開左。即你的例子為
field1,pattern
1,A
1,B
1,C
2,B
2,C
2,D
3,D
4,B

你要的query則是
select distinct field1 from table 3 where table3.pattern in (select pattern1 from table 2) 咁上下
方法一效率低。如果Query只係很久少需求,選這個。但如果entry很多會不合適。
方法二浪費存放位置。但如果entry多,效率會很好。注意係只要在sql server作一個trigger來update table3。變成對programming 方面基本係transparent。唔使理。如果唔用trigger,也可以用programming logic實現,不過有機會甩拖。最好亦有一個house keeping力能可以re-build table 3。
其他方法有,如不要table3,可以在需要時才build,即係變temp table,當然行query的時間長一點,但可以省一點位置。也不須house keeping。視乎資料多寡,和query頻密否。


收錄日期: 2021-04-26 11:30:04
原文連結 [永久失效]:
https://hk.answers.yahoo.com/question/index?qid=20120106000051KK00376

檢視 Wayback Machine 備份