首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >匹配在SQL中至少包含一次每个行的行。

匹配在SQL中至少包含一次每个行的行。
EN

Stack Overflow用户
提问于 2018-12-04 10:40:15
回答 3查看 56关注 0票数 0

我有一个用户表:

代码语言:javascript
复制
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)。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-12-04 10:44:18

你可以:

代码语言:javascript
复制
select oid
from table t
where typeid in (1,2,3)
group by oid
having count(*) = 3;

如果oid包含重复的typeid,则可以使用count(distinct typeid)

票数 2
EN

Stack Overflow用户

发布于 2018-12-04 10:49:16

你可以用存在

代码语言:javascript
复制
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

票数 0
EN

Stack Overflow用户

发布于 2018-12-04 11:44:54

如果您使用的是sql-server,则可以尝试以下操作。

代码语言:javascript
复制
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
    )

结果:

代码语言:javascript
复制
ID          Name  OID         TypeID
----------- ----- ----------- -----------
1           a     1           1
2           b     1           2
3           c     1           3
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53611066

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档