【问题标题】:How do I use a field that is a result of a subquery within a condition?如何在条件中使用作为子查询结果的字段?
【发布时间】:2012-01-01 07:42:16
【问题描述】:

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

任何帮助将不胜感激:)

【问题讨论】:

  • 查找 MySQL 的 HAVING 关键字。
  • 谢谢你,NB!这解决了我的问题!
  • 没有问题,祝你在使用 MySQL 时好运 :)

标签: mysql sql subquery conditional-statements


【解决方案1】:

注意是正确的,你需要有从句。但是为了googler的缘故,我会分享一点知识。

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

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

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

【讨论】:

  • 很有启发性。感谢您花时间进行解释。对子查询别名使用 HAVING 效果很好 ;)
猜你喜欢
  • 2013-03-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多