这是我尝试执行的查询,它应该返回一个表,其中包含未满的池的数据(members_nr 问题是 MySQL 不会将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;
最佳答案
注意是正确的,您需要having子句。但为了 Google 用户的利益,我将分享一些知识。
WHERE 子句用于将结果集限制为特定记录,它也用于优化。 Mysql 使用 WHERE 子句来标识它可以使用哪个索引来加速查询。
HAVING 子句在查询末尾执行。它用于过滤记录集。假设您有一个数据库中与您的 WHERE 子句匹配的内容列表。然后,您可以使用 HAVING 根据某些设定条件进一步过滤该列表。
我的基本经验法则是:如果您需要根据列的值进行选择,请使用 WHERE,如果您需要根据表中非列的值进行选择,请使用 HAVING。
关于mysql - 如何使用条件内子查询结果的字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8184182/