我想要做的是,显示所有容纳学生容量的房间,在房间表中它有一个字段“容量”,其中指定了可以容纳的学生数量, 我的想法是选择学生的所有记录,并检查他们是否在任何房间的“容量”列中找到超过规定的学生记录限制,然后App不应该允许用户插入记录,但我不知道我该怎么做。如果住在那个房间的学生人数超过可用的座位,我必须容纳学生进入房间,不得在任何房间容纳学生。
我尝试了什么:select Student.StudentName,Student.RoomNumber,Rooms.RoomID
From Student
INNER JOIN Rooms
ON Student.RoomNumber=Rooms.RoomId,
这就是我得到的,这不是我需要的,
所以我需要的是,jawad,hamid,asim是第一房间的居民,只能容纳3名学生,我非常想要的是展示有能力容纳新生的房间,如果是的话与房间记录相关的学生记录越多,那么它的容量就不允许用户将该房间分配给学生。
答案 0 :(得分:1)
您可以按房间分组:
select r.RoomNumber,
r.Capacity,
r.Capacity - count(s.Name) as RemainingCapacity
from Students s
join Rooms r
on r.RoomNumber = s.RoomNumber
group by r.RoomNumber, r.Capacity
这表明:
RoomNumber Capacity RemainingCapacity
1 2 1
2 3 -1
使用这些值:
生:
Name RoomNumber
B 1
C 2
D 2
E 2
F 2
房间:
RoomNumber Capacity
1 2
2 3
答案 1 :(得分:0)
select Student.StudentName,Student.RoomNumber
where Student.RoomNumber IN
( select Student.RoomNumber
From Student
INNER JOIN Rooms
ON Student.RoomNumber=Rooms.RoomId
Group by Student.RoomNumber, Rooms.Capacity
having COUNT(Student.RoomNumber) <= Rooms.Capacity) t