我有三个表存储简单的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
任何帮助将不胜感激,你怎么看?
答案 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);