2013-03-08 23 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 || '%';