我们应该在检索数据时避免 DB2 SQL 中的 IN 子句吗?

Posted

技术标签:

【中文标题】我们应该在检索数据时避免 DB2 SQL 中的 IN 子句吗?【英文标题】:Should we avoid IN clause in DB2 SQL while retrieving data? 【发布时间】:2014-06-20 17:28:46 【问题描述】:

仅使用不提及 where 子句 (IN) 的 select 命令从 DB2 表中获取所有数据是一种好习惯吗?

我被告知要避免在 SQL 中传递 10 个字符串值的 IN 子句。

【问题讨论】:

没有where 子句的选择确实很奇怪。没有 in 运算符的 where 子句很好。 为什么要避免做 SQL 标准规定的事情? 只有 10 个值应该没问题...如果您传递的值超过 100 个,我可能会考虑创建一个临时表,并使用 JOIN 或类似的东西进行过滤。但无论哪种选择,优化器都可能在内部处理几乎相同的任何一个。 就此而言,DB2 支持 CTE,因此您可以使用它来生成要加入的虚拟表。 使用什么替代方法避免 IN?出于什么原因避免它? 【参考方案1】:

是的,只要可以使用更好的替代方法,就应该避免使用 IN() 子句。 (如果您需要知道其他元素是否实际上更好,您需要指定环境、表定义、数据量、索引、正在执行的语句等。IOW,指定我们知道实际答案所需的一切到一个实际的问题。)

【讨论】:

以上是关于我们应该在检索数据时避免 DB2 SQL 中的 IN 子句吗?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Perl DBI 检索 DB2 SQL 存储过程的返回值?

如何在 ibm worklight 中通过 sql 适配器从 db2 检索或显示 html 页面上的数据?安卓混合应用开发

在单元测试时支持 H2 数据库中的 DB2 功能

使用 Worklight SQL 适配器从 DB2 存储和检索图像?

使用 DB2 检索不区分大小写的 SQL 选择查询

IBM DB2认证简介