SQL查询类似于带有AND条件而不是OR的IN where子句

Kri*_*mar 4 sql informix select relational-division

我正在尝试优化我的SQL查询,以便我们不必在JVM上处理响应.

考虑我们有以下表格和条目:

+-----------+-------------+
| Column1   | Column2     |
+-----------+-------------+
|val11      |val21        |
|val11      |val22        |
|val11      |val23        |
|val12      |val21        |
|val12      |val24        |
+-----------+-------------+
Run Code Online (Sandbox Code Playgroud)

现在,我想执行一个查询,这将导致column1s的行映射到Column2s值val21,val22,val23.

类似于IN where子句的东西,但是,当IN where子句在IN子句的值之间搜索OR时,我想在这些值之间搜索AND.

对于IN where子句:

SELECT Column1 from table
WHERE Column2 IN (val21, val22, val23)
Run Code Online (Sandbox Code Playgroud)

将导致val11和val12(因为IN子句将检查val21或val22或val23的数据).

相反,我希望有一些查询,它将检查Column1与val11的所有三个val21,val22,val23的映射.

使用Informix DB.

a_h*_*ame 7

这被称为"关系分裂".

通常的方法是,如下所示:

select column1
from x
where column2 in ('val21', 'val22', 'val23')
group by column1
having count(distinct column2) = 3;
Run Code Online (Sandbox Code Playgroud)

请注意,这还包括具有多于指定的三个值的值column2(因此它返回至少具有这三个值的那些值)