Yahoo 知識+ 將於 2021 年 5 月 4 日 (美國東岸時間) 停止服務。從 2021 年 4 月 20 日 (美國東岸時間) 起,Yahoo 知識+ 網站將轉為僅限瀏覽模式。其他 Yahoo 資產或服務,或你的 Yahoo 帳戶將不會有任何變更。你可以在此服務中心網頁進一步了解 Yahoo 知識+ 停止服務的事宜,以及了解如何下載你的資料。

LIKE operator with a SUBQUERY

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 個解答

評分
  • Lee
    Lv 7
    9 年前
    最愛解答

    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頻密否。

還有問題嗎?立即提問即可得到解答。