这是我正在尝试执行的查询,它应该返回一个包含未满的池数据的表(members_nr< members_max)。
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识别为字段,因为它是子查询的结果。这个小问题有逻辑解决方案吗?
任何帮助将不胜感激:)
答案 0 :(得分:5)
N.B。是的,你需要有条款。但是为了谷歌的缘故,我会分享一些知识。
WHERE子句用于将结果集限制为特定记录,它也用于优化。 Mysql使用WHERE子句来标识它可以用来加速查询的索引。
HAVING子句在查询结束时执行。它用于过滤记录集。因此,假设您有一个与WHERE子句匹配的数据库中的东西列表。然后,您可以使用HAVING在某些设定条件下进一步过滤该列表。
我的基本经验法则是:如果需要根据列的值进行选择,请使用WHERE,如果需要根据表中不是列的值进行选择,请使用HAVING。