sql - 在 ORACLE IN 子句中使用元组和元组中一个元素的条件

标签 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'))

考虑到上述查询,我​​的要求是检索具有 id 和 name 值以及特定范围内的日期的记录。让我们说
    effectiveDate <= date <= termDate  

我正在使用 甲骨文数据库和 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>

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

等待高人指点。
提前致谢。

最佳答案

你在寻找这样的东西吗?

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

这会在列表中查找对,然后检查日期范围之间的日期。

编辑:

我想你想把它分成多个子句,每组值一个:
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
      . . .

关于sql - 在 ORACLE IN 子句中使用元组和元组中一个元素的条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17689563/

相关文章:

mysql - 使用 UNION 的子查询

解决方案需要 3 个表的 SQL 查询

oracle - Oracle手动更新所有表的统计信息

c# - LINQ to SQL 和自关联表

java - 仅具有 CascadeType.REMOVE 的双向 @OneToOne 保存更改 : that is not wanted

sql - 如何根据分组来计算重复项以及查看值是否存在于同一字段值中?

sql - oracle查询没有使用索引

sql - 不能在里面有 CREATE TABLE if else

c# - Visual Studio 2013 ADO.net 实体模型没有 Oracle 数据源

ruby-on-rails - 批量导入数据有没有比ActiveRecord更好的解决方案?