我有一个用户表:
ID Name OID TypeID
1 a 1 1
2 b 1 2
3 c 1 3
4 d 2 1
5 e 2 1
6 f 2 2
7 g 3 2
8 h 3 2
9 i 3 2对于此表,我希望通过OID和TypeID进行筛选,以便得到OID过滤的行,其中包括TypeID中的所有1、2和3。
例如,在OID=1中,TypeID中有1、2和3,但我不应该得到I 4-6的行,因为对于ID4-6,OID是相同的,但是TypeID并不包括每个行(1、2和3)。
发布于 2018-12-04 10:44:18
你可以:
select oid
from table t
where typeid in (1,2,3)
group by oid
having count(*) = 3;如果oid包含重复的typeid,则可以使用count(distinct typeid)。
发布于 2018-12-04 10:49:16
你可以用存在
select oid from table t1
where exists ( select 1 from table t1 where t1.oid=t2.oid
group by t2.oid
having (distinct TypeID)=3
)Asume TypeID 1,2,3
发布于 2018-12-04 11:44:54
如果您使用的是sql-server,则可以尝试以下操作。
DECLARE @SampleData TABLE(ID INT, Name VARCHAR(5), OID INT, TypeID INT)
INSERT INTO @SampleData VALUES
(1 , 'a', 1, 1),
(2 , 'b', 1, 2),
(3 , 'c', 1, 3),
(4 , 'd', 2, 1),
(5 , 'e', 2, 1),
(6 , 'f', 2, 2),
(7 , 'g', 3, 2),
(8 , 'h', 3, 2),
(9 , 'i', 3, 2)
SELECT * FROM @SampleData D
WHERE NOT EXISTS (
SELECT * FROM @SampleData D1
RIGHT JOIN (VALUES (1),(2),(3)) T(TypeID) ON D1.TypeID = T.TypeID
AND D.OID = D1.OID
WHERE D1.TypeID IS NULL
)结果:
ID Name OID TypeID
----------- ----- ----------- -----------
1 a 1 1
2 b 1 2
3 c 1 3https://stackoverflow.com/questions/53611066
复制相似问题