Search code examples
sqloracle-databasesql-in

SQL IN Operator with different comparators


I need a way to make a IN operator that makes different kind of comparisons for each parameter, that way:

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

)

Explanation:

  • par1 needs to be EQUAL to par1answer1 or par1answer2
  • par2 needs to be EQUAL to par2answer1 or par2answer2
  • par3 needs to be BETWEEN par3min1 and par3max1, or par3min2, par3max2

@EDIT
Sorry for not being clear, I'm not really good at explanations, but I'm working on it!
Example set:

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

Solution

  • I am guessing you really want this:

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

    This is not exactly how your explanation goes, but it does seem like a reasonable interpretation of your attempted query.