MySQL:显示与否取决于字段&引用计数比较

MySQL: Show or not depending on field & reference count comparison

我会尽量简短。我有一个 table 和 "Guests" 以及一个 table 和 "Rooms"。每个客人都可以分配到一个房间,但房间本身可以容纳不同数量的客人,在字段 "Space" 中指定。在用于注册新客人的表格中,我想创建一个可供选择的可用房间列表 - 一个仅显示仍可容纳至少一个人的房间数量的列表。

我的想法是简单地使用:

SELECT Rooms.Number
FROM Rooms
LEFT OUTER JOIN Guests ON Rooms.ID = Guests.Room
WHERE COUNT(Guests.Room) < Rooms.Space
ORDER BY Rooms.Number

但这不起作用。我想也许比较两个字段是问题所在,所以我也尝试了这样的 WHERE 子句:

WHERE (Rooms.Space - COUNT(Guests.Room)) > 0

但是这个也returns一个错误。

非常感谢您的帮助。

如果您使用像 Count() 这样没有 Group By 子句的聚合函数,它将计算整个数据集的聚合值。相反,在 Rooms.Number 上使用 Group byHaving 子句来过滤掉可用 space.

的房间

尝试:

SELECT Rooms.Number, 
       Rooms.Space - COUNT(Guests.Room) AS available_space 
FROM Rooms
LEFT OUTER JOIN Guests ON Rooms.ID = Guests.Room
GROUP BY Rooms.Number, Rooms.Space 
HAVING available_space > 0
ORDER BY Rooms.Number 
SELECT Rooms.Number
FROM Rooms
WHERE (SELECT COUNT(*) from GUESTS WHERE Guests.Room=Rooms.ID) < Rooms.Space
ORDER BY Rooms.Number

看起来更清晰

SELECT Rooms.Number
FROM Rooms
LEFT OUTER JOIN Guests ON Rooms.ID = Guests.Room
GROUP BY Rooms.Number
HAVING COUNT(Guests.Room) < MAX(Rooms.Space)
ORDER BY Rooms.Number

可能也可以