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