嵌套SQL生成器?

时间:2013-01-29 01:03:33

标签: java sql

我正在尝试创建嵌套的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 (...))

3 个答案:

答案 0 :(得分:1)

此类问题称为Relational Division

SELECT ID
FROM tableName
WHERE VALUE IN ('SMALL','SMOOTH')
GROUP BY ID
HAVING COUNT(*) = 2

上述查询会生成1,因为该ID包含两个记录。

如果valueID没有强制执行唯一约束,则需要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

SQL Fiddle Example

<强>结果:

| 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)。