选择与常见标准匹配的行

时间:2012-11-08 15:40:26

标签: mysql sql

我似乎无法扭曲我的大脑,我相信简单,质疑。

我有下表(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,它可能是:

给我所有ID (Value = 'val_1') AND (value = 'val_3')

的ID

这应该返回(ID_A)作为唯一同时具有val1和val3的id。如何以性能恶劣的方式实现这一目标。

3 个答案:

答案 0 :(得分:3)

听起来你想要这个,这会给你所有同时包含VAL_1VAL_3的ID:

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

请参阅SQL Fiddle with Demo

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

或者您可以稍微改变一下:

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

答案 1 :(得分:1)

您可以使用嵌套的select语句:

SELECT ID FROM Table WHERE ID IN (SELECT ID FROM Table WHERE Value = 'VAL_1')
AND Value = 'VAL_3';

答案 2 :(得分:0)

这应该有效

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

此致