2013-03-08 50 views
1

我必須寫一個SQL查詢找到ID在一個表,該表類似於另一個表的ID的。如何使一個SQL查詢來測試許多通配符的ID不使用許多語句

而從表-B查詢的問題是,在表-B這些查詢將是具有附接於它的一些字符串。

例如:

如果傳遞的ID是:123456789

然後在表-B它會像ABC12456789XYZ

所以選擇這些,我想編寫一個SQL查詢,如下圖所示,迭代數千and條款:

String idCsList = ""; 
int i = 1; 
for(String ids : idList) { 
    if(i == 1) { 
     idCsList = idCsList + "'%" + ids + "%'" + ")"; 
     i++; 
     continue; 
    } 
    idCsList = idCsList + " AND TABLE_B.id LIKE (" + "'%" + ids + "%'" + ")"; 
    i++; 
} 

但由於限制這種想法是行不通的在SQL查詢的長度上,並且查詢將失敗。這也需要很長時間。

有沒有更好的方式在更多的性能優化的方式使用通配符許多運營商查詢?

+0

爲什麼千萬喜歡在一個單一的查詢? – 2013-03-08 06:31:53

+0

只是誇大其詞...... – 2013-03-08 06:34:04

+0

不要那樣做.. – 2013-03-08 06:35:16

回答

1

在SQL您可以構造被傳遞到LIKE字符串:

SELECT * 
FROM TABLE_A A INNER JOIN TABLE_B B ON A.ID = B.ID 
WHERE B.ID LIKE ('%' + A.ID + '%') 
0

選擇TABLE_A *一個內部聯接表-B B關於 b.id LIKE '%' + a.id + '%' 其中a.id在(idCsList)

請使用「%適當concat函數'+ a.id +' %」

0

只要保持的索引列與來自TABLE_A的ID,並選擇前綴= ID。

由「%」打頭的LIKE謂詞是真的很貴,因爲你要掃描整個表。

1

從這個例子中你給它看起來像您就可以用某種功能的table_B.id提取table_A.id。

  1. 作爲第一步,您可以編寫這樣的功能,並在您的選擇中使用它。但是這可能對性能沒有太大幫助(我可能實際上會損害性能),但是...

  2. 您可以使用該函數在table_b上創建基於函數的索引,使其看起來像函數值就在該表爲sql引擎使用。

當然,這需要修改表......不知道這是可能的,你的情況。

0

你嘗試過其他answear,像ecampver的?

你應該試試這個假設你正在運行Oracle數據庫,就這麼簡單:

select AID from A join B on BID like '%' || AID || '%';