MySQL: Показать или нет в зависимости от сравнения полей и количества ссылок - PullRequest
0 голосов
/ 09 октября 2018

Я постараюсь быть кратким.У меня есть стол с «Гости» и стол с «Номера».Каждому гостю может быть назначена отдельная комната, но в самих комнатах может быть разное количество гостей, указанное в поле «Пробел».В форме, используемой для регистрации нового гостя, я хотел бы создать список доступных номеров, из которых можно выбрать только те номера, которые могут вместить хотя бы одного человека.

Моя идеябыло просто использовать:

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

Но это также возвращает ошибку.

Я был бы признателен за некоторую помощь.

Ответы [ 2 ]

0 голосов
/ 11 октября 2018
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

Вероятно, также будет работать

0 голосов
/ 09 октября 2018

Если вы используете функцию агрегирования, такую ​​как Count() без предложения Group By, она вычислит совокупное значение по всему набору данных.Вместо этого используйте Group by на Rooms.Number с предложением Having, чтобы отфильтровать комнаты с доступным пространством.

Попробуйте:

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 
...