1

我必须编写一个 SQL 查询来在一个表中查找与另一个表的 ID 相似的 ID。

从 TABLE_B 查询时的问题是,在 TABLE_B 中,这些查询将附加一些字符串。

例如:

如果传递的 ID 是:123456789

然后在 TABLE_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查询的长度有限制,查询会失败。也需要很长时间。

有没有更好的方法以更优化的方式使用许多通配符运算符进行查询?

4

5 回答 5

1

从您给出的示例中,您可以使用某种函数从 table_B.id 中提取 table_A.id。

  1. 作为第一步,您可以编写这样的函数并在您的选择中使用它。但这可能对性能没有太大帮助(我实际上可能会损害性能)但是......

  2. 您可以使用该函数在 table_b 上创建基于函数的索引,使其看起来函数值就在表中供 sql 引擎使用。

当然,这需要更改表格……不知道您的情况是否可行。

于 2013-03-08T06:43:11.050 回答
1

在 SQL 中,您可以构造传递给的字符串LIKE

SELECT * 
FROM TABLE_A A INNER JOIN TABLE_B B ON A.ID = B.ID
WHERE B.ID LIKE ('%' + A.ID + '%')
于 2013-03-08T07:05:02.020 回答
0

Select * from TABLE_A a Inner Join TABLE_B b on b.id like '%'+a.id+'%' where a.id in(idCsList)

请为 '%'+a.id+'%' 使用适当的 concat 函数

于 2013-03-08T06:35:31.483 回答
0

只需使用 TABLE_A 中的 ID 保留一个索引列,然后 SELECT where prefix=id。

以 '%' 为前缀的 LIKE 谓词非常昂贵,因为您必须扫描整个表。

于 2013-03-08T06:35:34.920 回答
0

您是否尝试过其他人的回答,例如 ecampver 的?

假设您正在运行 oracle 数据库,您应该尝试这样做,就这么简单:

select AID from A join B on BID like '%' || AID || '%';
于 2014-01-02T20:47:22.940 回答