Java 如何在不使用许多语句的情况下进行SQL查询以测试多个通配符id

Java 如何在不使用许多语句的情况下进行SQL查询以测试多个通配符id,java,sql,oracle,Java,Sql,Oracle,我必须编写一个SQL查询来查找表中与另一个表的id相似的id 从表_B查询时的问题是,在表_B中,这些查询将附加一些字符串 例如: 如果通过的ID是:123456789 然后在表B中,它将类似于ABC12456789XYZ 为了选择这些,我考虑编写一个SQL查询,如下所示,迭代数千个and子句: 但是,由于SQL查询长度的限制,这种想法行不通,查询将失败。这也需要太长时间 是否有更好的方法以更优化的方式使用多个通配符进行查询?从表a内部联接表B上选择* b、 id类似于“%”+a.id+“%”

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

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

例如:

如果通过的ID是:123456789

然后在表B中,它将类似于ABC12456789XYZ

为了选择这些,我考虑编写一个SQL查询,如下所示,迭代数千个and子句:

但是,由于SQL查询长度的限制,这种想法行不通,查询将失败。这也需要太长时间


是否有更好的方法以更优化的方式使用多个通配符进行查询?

从表a内部联接表B上选择* b、 id类似于“%”+a.id+“%” a.id在哪里


请对“%”+a.id+“%”使用适当的concat函数

只需保留一个带有表_a中id的索引列,并选择其中prefix=id


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

从您给出的示例中,似乎可以使用某种函数从表\u B.id中提取表\u A.id

作为第一步,您可以编写这样一个函数并在select中使用它。但这可能对性能没有多大帮助,我可能会损害性能,但是

您可以使用函数在表_b上创建一个基于函数的索引,使其看起来像是sql引擎要使用的函数值就在表中


当然,这需要对表进行更改。。。不知道这在您的情况下是否可行。

在SQL中,您可以构造传递到以下对象中的字符串:


你有没有试过其他的answear,比如eCamper的

假设您运行的是oracle数据库,您应该尝试这样做,简单如下:

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

为什么一次查询中有1000万个like?@thorbjorn ravn andersen是否还有其他关键字可查找这些附加字符串是否具有固定格式/固定长度?@peterm是的字符串是表a的Id,它们具有固定格式和长度您能否编写一个函数,将连接的表Id转换回您传递的Id?你必须摆脱LIKE关键字来改进任何东西。
SELECT * 
FROM TABLE_A A INNER JOIN TABLE_B B ON A.ID = B.ID
WHERE B.ID LIKE ('%' + A.ID + '%')
select AID from A join B on BID like '%' || AID || '%';