如何选择只有一个关系的行?

时间:2017-03-29 19:58:04

标签: sql sql-server-2008

我有三个表存储简单的onet-to-many关系。

Table1  idT1  Name
          1    A
          2    B
          3    B

Table2  idT2  Value
          1     AA
          2     BB
          3     CC 
          4     DD  

Table3   idT1  idT2
           1     4              
           1     2
           2     1
           2     4
           2     3
           3     4

我需要返回Table3中的那些行,这些行在Table1和Table2中的某些行之间只有一个关系。

这样的事情:

如果我查找关系为idT2 = 4的行,则查询应仅返回此行:

Table3   idT1  idT2
           3     4              

我想出了这个问题,但我认为必须有一些更容易的事情:

    ;WITH tb AS(SELECT idT1 FROM Table3 WHERE idT2 IN(4))
    SELECT t.idT1 FROM T3 t INNER JOIN tb ON t.idT1 = tb.idT1     
    GROUP BY idT1 HAVING COUNT(t.idT2) = 1 

任何帮助将不胜感激,你怎么看?

1 个答案:

答案 0 :(得分:1)

一种方法是使用聚合,只查找给定idT2出现一次的值:

select idT1, max(idT2) as idT2
from t3
group by idT1
having min(idT2) = 4 and max(idT2) = 4;

您也可以使用not exists

执行此操作
select t3.*
from t3
where t3.idT2 = 4 and
      not exists (select 1 from t3 tt3 where tt3.idT1 = t3.idT1 and tt3.idT2 <> 4);