2017-05-31 21 views
0

给予表一涉及到行:从左表中选择行时,在右表

I1 
I2 
I3 
I4 

,第二个表C:

C1 
C2 
C3 

而第三CI:

I1 C2 
I1 C3 
I2 C2 
I3 C2 
I3 C3 
I4 C2 
I4 C3 

任何关于SQL请求的想法,只给出所有第一个表共有的行,如下面的结果:

C2 

另一组是这样的:

I1 C2 
I1 C3 
I2 C2 
I3 C3 
I4 C2 
I4 C3 

的结果将是空的。 和

I1 
I2 
I3 
I4 
I5 

I1 C2 
I1 C3 
I2 C2 
I3 C2 
I3 C3 
I4 C2 
I4 C3 

reuslt:空

*参见讨论

谢谢。

+3

GROUP BY,HAVING,COUNT [DISTINCT] – jarlh

回答

3

你可以使用NOT EXISTS

SELECT * 
FROM TableC c 
WHERE NOT EXISTS ( SELECT 1 
        FROM TableI i 
        WHERE NOT EXISTS ( SELECT 1 FROM TableCI ci 
             WHERE ci.I = i.I 
               AND ci.C = c.C 
            ) 
       ) 

或者GROUP BY, HAVING, COUNT [DISTINCT]作为jarlh的建议

DECLARE @NumberI int = (SELECT count(*) FROM TableI) 

SELECT c.C 
FROM TableC c 
INNER JOIN TableCI ci ON c.C = ci.C 
INNER JOIN TableI i ON ci.I = i.I 
GROUP BY c.C 
HAVING COUNT(DISTINCT ci.I) = @NumberI 
+0

我'INNER JOIN TableI'检查ci.I必须在表Ⅰ – TriV

+0

第二个解决方案似乎除非一个工作正常第一个表的元素不与第二个表中的任何元素关联,如:I5 NULL – Tuximo

+0

在这种情况下,COUNT(DISTINCT ci.I)= @ NumberI'如何?它不会存在于结果集中。 – TriV

0

你可以使用: WHERE EXISTS(子查询)

0

所以你要显示的第二列仅当此列中的值与表I中存在的所有记录相关联时才使用表CI?

如果是这样的话,你可以这样做:

select Col2 from (select Col2 , count(Col1) As Expr1 from CI group by Col2) A 
where Expr1 = (select count(*) from I) 
0

这里有一个简单的解决方案的基本前提是:
我们只想要与C的记录,为此,COUNT DISTINCT他们我的记录应该是一样的计数不同的我记录为整个表

  select TBL.C, count(distinct TBL.I) 
      from TBL 
      group by TBL.C 
      having count(distinct TBL.I)= (select count(distinct TBL.I) from TBL) 

在Oracle中,这里是查询和结果集

  with TBL 
      as 
      (
      select 'I1' I,'C2' C from dual 
      union all 
      select 'I1','C3' from dual 
      union all 
      select 'I2','C2' from dual 
      union all 
      select 'I3','C2' from dual 
      union all 
      select 'I3','C3' from dual 
      union all 
      select 'I4','C2' from dual 
      union all 
      select 'I4','C3' from dual 
      ) 

      select TBL.C, count(distinct TBL.I) 
      from TBL 
      group by TBL.C 
      having count(distinct TBL.I)= (select count(distinct TBL.I) from TBL) 

结果集:

C2 4 
相关问题