1

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

3 回答 3

1

这种类型的问题称为Relational Division

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

1由于 ID 包含两条记录,因此将产生上述查询。

如果没有value对每个强制执行唯一约束IDDISTINCT则需要。

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

其他)

于 2013-01-29T01:07:28.693 回答
0
select ID
from MyTable
where VALUE in ('RED', 'SMALL')
group by ID
having count(distinct VALUE) = 2

SQL 小提琴示例

结果

| ID |
------
|  1 |
于 2013-01-29T01:08:06.710 回答
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)。

于 2013-01-29T01:45:04.417 回答