在ORACLE IN子句中使用元组,并在元组中使用一个元素的条件

Bha*_*ABK 3 sql oracle orm ibatis mybatis

我在这里看到很多关于在IN子句中使用元组的问题.我的情况与其他情况略有不同.IN子句中元组的一般用法如下所示

    Select * from MY_TABLE
    where (id,name,date) IN ((1,'new','10-JUL-13'),(2, 'old','09-JUN-13'))
Run Code Online (Sandbox Code Playgroud)

考虑到上述查询,我​​的要求是检索具有id和name值的记录以及特定范围内的日期.我们说吧

    effectiveDate <= date <= termDate  
Run Code Online (Sandbox Code Playgroud)

我正在使用ORACLE数据库和MyBatis ORM.我将数据作为对象列表获取,因此当我使用mybatis时,我可以使用foreach/for循环来填充元组,但是当我想使用条件来处理对象中的一个值时.

当我使用Mybatis从列表中读取一个值时,where子句如下所示

    <where>
        and (id,name) IN
   <foreach item="object" collection="data" open="(" separator=","close=")">
    (#{object.id},#{object.name})
   </foreach>
    </where>
Run Code Online (Sandbox Code Playgroud)

我也必须在循环中包含条件.

等待专家的建议.提前致谢.

Gor*_*off 7

你在找这样的东西吗?

select *
from MY_TABLE
where (id, name) in ((1,'new'), (2, 'old')) and
      date between effectiveDate and termDate
Run Code Online (Sandbox Code Playgroud)

这将查找列表中的对,然后检查一系列日期之间的日期.

编辑:

我想你想把它分成多个子句,每个子句对应一组值:

where (id = 1 and name = 'new' and date between eff1 and term1) or
      (id = 2 and name = 'old' and date between eff2 and term2) or
      . . .
Run Code Online (Sandbox Code Playgroud)