我似乎无法扭曲我的大脑,我相信简单,质疑。
我有下表(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_A)
作为唯一同时具有val1和val3的id。如何以性能恶劣的方式实现这一目标。
答案 0 :(得分:3)
听起来你想要这个,这会给你所有同时包含VAL_1
和VAL_3
的ID:
select id
from yourtable
where value in ('VAL_1', 'VAL_3')
group by id
having count(distinct value) > 1
根据您提供的数据仅ID_A
次匹配,因为它是同时包含VAL_1
和VAL_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
此致