0

我似乎无法扭曲我的大脑,我相信这个问题很简单。

我有下表(Id 和 Value 共同构成键),该表将很大,包含数百万个条目。

桌子

ID      Value
ID_A    VAL_1
ID_A    VAL_2
ID_A    VAL_3
ID_B    VAL_1
ID_B    VAL_2
ID_C    VAL_3

我想获取与任意选择匹配的所有 id,它可能是:

给我所有拥有的 IDS(Value = 'val_1') AND (value = 'val_3')

这应该(ID_A)作为唯一同时具有 val1 和 val3 的 id 返回。我如何以一种巧妙的方式实现这一点。

4

3 回答 3

3

听起来你想要这个,这会给你所有同时拥有VAL_1和的id VAL_3

select id
from yourtable
where value in ('VAL_1', 'VAL_3')   
group by id
having count(distinct value) > 1

请参阅带有演示的 SQL Fiddle

根据您提供的数据,仅ID_A匹配,因为它是唯一一个同时具有VAL_1VAL_3

或者您可以将其稍微更改为:

select id
from yourtable
where value in ('VAL_1', 'VAL_3')   
group by id
having count(distinct value) = 2
于 2012-11-08T15:44:46.460 回答
1

您可以使用嵌套的选择语句:

SELECT ID FROM Table WHERE ID IN (SELECT ID FROM Table WHERE Value = 'VAL_1')
AND Value = 'VAL_3';
于 2012-11-08T15:43:03.870 回答
0

这应该工作

SELECT id
FROM
(
    SELECT *
    FROM table
    WHERE value IN ('val_1', 'val_3')
) t
GROUP BY id
HAVING COUNT(*) = 2

问候

于 2012-11-08T15:54:24.423 回答