具有不同比较器的 SQL IN 运算符

Posted

技术标签:

【中文标题】具有不同比较器的 SQL IN 运算符【英文标题】:SQL IN Operator with different comparators 【发布时间】:2016-02-23 09:33:41 【问题描述】:

我需要一种方法来创建一个对每个参数进行不同类型比较的 IN 运算符,这样:

SELECT * 
FROM Table 
WHERE (par1, par2, par3) IN ((par1answer1, par2answer1, par3min1, par3max1),
                             (par1answer2, par2answer2, par3min2, par3max2),
                             ...,
                             (par1answern, par2answern, par3minn, par3maxn)

)

解释:

par1 必须等于 par1answer1 或 par1answer2 par2 必须等于 par2answer1 或 par2answer2 par3 需要在 par3min1 和 par3max1 之间,或者 par3min2, par3max2

@EDIT 抱歉不清楚,我不太擅长解释,但我正在努力! 示例集:

par1    par2    par3
2       5       10
3       6       20
4       7       30
5       8       60

SELECT * 
FROM Table 
WHERE (par1, par2, par3) IN ((2,5,9,11),
                             (3,6,11,19),
                             (5,7,9,100),
                             (5,8,10,80),
                             (2,8,0,200))

Result:
par1    par2    par3
2       5       10    //matches first tuple
5       8       60    //matches fourth tuple

【问题讨论】:

不太确定您在问什么,但答案将涉及一个或多个联接。 还有一组样本数据作为指导会很棒! @JorgeCampos 提供。 【参考方案1】:

我猜你真的想要这个:

WHERE ( (par1, par2) = (par1answer1, par2answer1) and
        par3 between par3min1 and par3max1
      ) or
      ( (par1, par2) = (par1answer2, par2answer2) and
        par3 between par3min2 and par3max2
      )

这与您的解释并不完全一致,但它似乎是对您尝试查询的合理解释。

【讨论】:

是的,基于对@a_horse_with_no_name 答案的评论,这就是他想要的。 除了oracle还有哪些db支持tuple比较? @JuanCarlosOropeza - db2 可以。从很久以前它就是标准的一部分......嗯......我要说'92 mysql、Postgres 和 MsSQL 怎么样? @JuanCarlosOropeza:Postgres、DB2、HSQL、MySQL、H2 - 这是 SQL 标准的一部分【参考方案2】:

只需手写比较。 IN 不会做你想做的事。

where (par1 = par1answer or par1 = par1answer2)
and (par2 = par2answer1 or par2 = par2answer2)
and (par3 between par3min1 and par3max1 or par3 between par3min2 and par3max2)

【讨论】:

以上是关于具有不同比较器的 SQL IN 运算符的主要内容,如果未能解决你的问题,请参考以下文章

MongoDB条件查询(比较运算) --- 2022-04-03

对 jcrBrowser 的 sql 查询中的运算符 IN 不起作用

SQL 基础之where过滤和比较运算符

如何将 IN 运算符与 LIKE 条件相结合(或获得可比较结果的最佳方法)

sql中,In和where的区别

SQL中的等号INLIKE三者的比较