我必须编写一个SQL查询来查找表中的id,它与另一个表的ID类似。
从TABLE_B查询时的问题是,在TABLE_B中,这些查询将附加一些String。
例如:
如果传递的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查询的长度限制,这个想法不起作用,查询将失败。这也需要很长时间。
是否有更好的方法以更加性能优化的方式使用许多通配符运算符进行查询?
答案 0 :(得分:1)
从您给出的示例看起来您可以使用某种函数从table_B.id中提取table_A.id。
作为第一步,您可以编写这样的功能并在您的选择中使用它。但这可能对性能没有多大帮助(我可能实际上会损害性能)但是......
您可以使用该函数在table_b上创建一个基于函数的索引,使其看起来正好在表中的函数值供sql引擎使用。
当然这需要更改表格...不知道在你的情况下这是否可行。
答案 1 :(得分:1)
在SQL中,您可以构造传递给LIKE
的字符串:
SELECT *
FROM TABLE_A A INNER JOIN TABLE_B B ON A.ID = B.ID
WHERE B.ID LIKE ('%' + A.ID + '%')
答案 2 :(得分:0)
从TABLE_A中选择*内部连接TABLE_B b b.id喜欢'%'+ a.id +'%' 其中a.id in(idCsList)
请为'%'+ a.id +'%'
使用适当的concat函数答案 3 :(得分:0)
只需使用TABLE_A中的ID保留索引列,并使用SELECT其中prefix = id。
以'%'为前缀的LIKE谓词非常昂贵,因为你必须扫描整个表格。
答案 4 :(得分:0)
你有没有试过别人的衣服,比如ecampver's?
你应该尝试这个,假设你正在运行oracle数据库,简单如下:
select AID from A join B on BID like '%' || AID || '%';