我有这样的表:
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
答案 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
使用