如何在条件中使用由子查询结果的字段?

时间:2011-11-18 14:43:32

标签: mysql sql subquery conditional-statements

这是我正在尝试执行的查询,它应该返回一个包含未满的池数据的表(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 个答案:

答案 0 :(得分:5)

N.B。是的,你需要有条款。但是为了谷歌的缘故,我会分享一些知识。

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

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

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