我正在尝试创建嵌套的SELECT SQL语句。我存储所有值和id,并希望选择满足多个值的行。如何使用Java生成SELECT语句?例如,
ID VALUE
1 RED
2 BIG
1 SMALL
1 SMOOTH
2 TALL
.....
要选择红色和小的项目,语句将为:
SELECT *
FROM table
WHERE table.value = RED AND
id IN (SELECT *
FROM table
WHERE table.value = SMALL AND id IN (...))
答案 0 :(得分:1)
此类问题称为Relational Division
SELECT ID
FROM tableName
WHERE VALUE IN ('SMALL','SMOOTH')
GROUP BY ID
HAVING COUNT(*) = 2
上述查询会生成1
,因为该ID包含两个记录。
如果value
对ID
没有强制执行唯一约束,则需要DISTINCT
。
SELECT ID
FROM tableName
WHERE VALUE IN ('SMALL','SMOOTH')
GROUP BY ID
HAVING COUNT(DISTINCT VALUE) = 2
OTHER(S)
答案 1 :(得分:0)
select ID
from MyTable
where VALUE in ('RED', 'SMALL')
group by ID
having count(distinct VALUE) = 2
<强>结果:
| ID |
------
| 1 |
答案 2 :(得分:0)
以下是解决此问题的一般方法:
select id
from t
group by id
having max(case when value = 'Red' then 1 else 0 end) = 1 and
max(case when value = 'Small' then 1 else 0 end) = 1
换句话说,集合中的成员资格成为having
语句中的一个子句。这些可以是包含和排除(使用= 0
而不是= 1
)和可选(使用or
而不是and
)。