SQL自加入查询

时间:2016-04-21 07:22:10

标签: sql

我有一个表格,格式如下。

Id   Orig_Id   Type 
11    1111    Internal
12    1111    Internal
13    1111    Internal
14    1112    External
15    1112    Internal

我想要检索所有“仅”类型为内部的Orig_Id。查询应该返回1111。

2 个答案:

答案 0 :(得分:3)

使用HAVING

SELECT Orig_Id
FROM tbl
GROUP BY Orig_Id
HAVING 
    SUM(CASE WHEN Type <> 'Internal' THEN 1 ELSE 0 END) = 0
    AND SUM(CASE WHEN Type = 'Internal' THEN 1 ELSE 0 END) > 0

第一个条件确保Orig_Id没有Type = Internal行。第二个确保它至少有一个Internal

ONLINE DEMO

答案 1 :(得分:1)

只是为了检查是否只有一个Type而且唯一的一个是'内部'

SELECT Orig_Id
FROM (VALUES (11,1111,'Internal'),
    (12,1111,'Internal'),
    (13,1111,'Internal'),
    (14,1112,'External'),
    (15,1112,'Internal')) AS T(Id ,Orig_Id, Type)
GROUP BY Orig_Id
HAVING 
    -- There is one
    COUNT(DISTINCT Type) = 1
    -- and only one internal
    AND MIN(Type) = 'Internal'