Как использовать поле, являющееся результатом подзапроса в условии? - PullRequest
2 голосов
/ 18 ноября 2011

Вот запрос, который я пытаюсь выполнить, и он должен вернуть таблицу, содержащую данные для неполных пулов (members_nr

SELECT id, name,
(
    SELECT COUNT(*) FROM pools_entries WHERE pool_id=p.id AND pending=0
) AS members_nr,
members_max, open
FROM pools p
WHERE id IN(1,2,3,4) AND members_nr < members_max;

Проблема в том, что MySQL выигралне распознает members_nr как поле, поскольку оно является результатом подзапроса.Есть ли логическое решение этой маленькой проблемы?

Любая помощь будет высоко ценится:)

1 Ответ

5 голосов
/ 18 ноября 2011

N.B. правильно, вам нужно иметь пункт. Но ради гуглера я поделюсь с вами небольшим знанием.

Предложение WHERE используется для ограничения набора результатов конкретными записями, а также для оптимизации. Mysql использует предложение WHERE, чтобы определить, какие индексы он может использовать для ускорения запроса.

Предложение HAVING выполняется прямо в конце запроса. Используется для фильтрации набора записей. Итак, представьте, что у вас есть список данных из базы данных, который соответствует вашему предложению WHERE. Затем вы можете использовать HAVING для дальнейшей фильтрации этого списка по некоторым заданным условиям.

Основное правило: если вам нужно выбирать на основе значения столбца, используйте WHERE, если вам нужно выбирать на основе значения чего-то, что не является столбцом в таблице, используйте HAVING.

...