2011-11-18 74 views
2

这里是我正在执行的查询,它应该返回一个包含未满的池的数据的表(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识别为字段,因为它是子查询的结果。这个小问题有没有逻辑解决方案?

任何帮助将不胜感激:)

+1

查找MySQL的'HAVING'关键字。 –

+0

谢谢,N.B! 这解决了我的问题! –

+0

没有probs,与MySQL合作的好运:) –

回答

5

N.B.是正确的,你需要有条款。但为了Google员工的利益,我会分享一些知识。

WHERE子句用于限制结果集到特定的记录,它也用于优化。 Mysql使用WHERE子句来标识它可以用来加快查询的索引。

HAVING子句在查询结束时执行。它用于过滤记录集。所以想象一下,你有一个与你的WHERE子句匹配的数据库中的东西列表。然后,您可以使用HAVING在某些设置条件下进一步过滤该列表。

我的基本经验法则是:如果您需要根据列的值进行选择,请使用WHERE,如果您需要根据表中不是列的某个值进行选择,请使用HAVING。

+0

非常有启发性。 我感谢你把时间放在这个解释中。 使用HAVING作为子查询别名效果很好;) –

+0

+1用于指出优化部分。 –

相关问题