通过比较2列

时间:2017-03-20 01:38:01

标签: sql oracle

我有这样的表:

GroupID    Room
    10        A
    10        B
    10        C
    20        A
    20        C
    20        D
    30        A  
    30        B
    30        C

在第一列上有多个组,他们被分配了房间。因此,第10组分配了A,B,C房间。

现在我想找到与第10组相比缺少同一房间的组。

因此,从上面的示例中,它应该选择Group ID = 20& Room = B.就像它应该列出所有组ID和丢失的房间。

我能做的就是,

select GroupID, Count(*)
from GroupRooms
group by GroupID;

目前只返回这样的内容,

GroupID         Count(*)
  10              3
  20              3
  30              3

2 个答案:

答案 0 :(得分:3)

您可以通过为组10中的所有房间生成每个组的所有行来执行此操作。然后使用left join确定实际存在的行:

select g.groupId, t10.room
from t t10 cross join
     (select distinct GroupId from t) g left join
     t     
     on t.groupId = g.groupId and t.room = t10.room 
where t10.GroupId = 10 and t.room is null; 

答案 1 :(得分:2)

SELECT * FROM GroupRooms
Where GroupID <> 10 AND Room NOT IN (SELECT Room from GroupRooms where GroupID = 10)

如果我理解你的问题,这应该有效。查找其他ID未使用的所有房间,并由Id = 10

使用