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.
这被称为"关系分裂".
通常的方法是,如下所示:
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(因此它返回至少具有这三个值的那些值)