【问题标题】:SQL in clause with items > 1000 [duplicate]项目> 1000的SQL in子句[重复]
【发布时间】:2016-11-22 05:04:39
【问题描述】:

0我有这个方法:

public List<Product> getProductsByListIds(List<Long> ids) {
    String query = "from Product pr where pr.id in(:ids)";
    List<Product> products= (List<Product>) getSession().createQuery(query)
        .setParameterList("ids", ids).list();
    return products;
  }

这个方法还可以,我唯一的问题是ids.size() &gt;1000 我正在努力为这个问题找到一个令人信服的解决方案。

【问题讨论】:

  • ids.size() &gt; 100时有什么问题?
  • 您使用的是哪个 DBMS?某些 DBMS 确实对 IN 列表的元素数量有限制。但我知道的唯一一个是 Oracle,那里的限制是 1000,而不是 100
  • in 子句是有限制的,这里我以100为例
  • 为此您可以使用标准接口。请看docs.jboss.org/hibernate/orm/3.2/api/org/hibernate/…
  • 我使用 ORACLE 和 MySql

标签: java mysql sql oracle jdbc


【解决方案1】:

我的建议是退后一步,看看设计和你想要实现的目标,将数百个参数传递到 SQL 语句中不会很有效,如果它是最优雅的解决方案,满足您的要求。

如果不了解如何调用此方法以及此 id 列表来自何处,很难给出具体建议,但我建议您尽可能考虑使用连接。

【讨论】:

    猜你喜欢
    • 2011-06-10
    • 2011-01-24
    • 2017-02-13
    • 2014-10-30
    • 1970-01-01
    • 2013-03-30
    • 1970-01-01
    • 1970-01-01
    • 2010-09-28
    相关资源
    最近更新 更多