首页 > 解决方案 > 比较变量时如何在 where 语句中使用 CASE 和 IN

问题描述

我不想使用动态 SQL,所以我正在尝试不同的方法来改变我的 where 语句。

在我的 WHERE 语句中,有一行:

AND c.nregion = pnregion

pnregion是俄罗斯的一些地区。这个语句帮助我的游标工作得更快,因为 Oracle 不必查看整个表。

问题是如果pnregion等于 47 或 78 那么这一行应该是这样的

AND c.nregion in (47, 78)

怎么做?我应该以某种方式使用 CASE 还是在光标之外可以做些什么?

标签: oracleplsqlcase

解决方案


您可以使用:

WHERE ( c.nregion = pnregion
      OR (   pnregion  IN ( 47, 78 )
         AND c.nregion IN ( 47, 78 )
         )
      )

如果您想要两个以上的值,这很容易扩展,因为这些值可以添加到两个IN过滤器中。


推荐阅读