2010-11-27 80 views

回答

1

是的,它应该是不同的 - (1)预计会更快。

确保首先运行主查询,然后应用过滤器 - 因此它基本上可以处理由(query minus having)返回的数据集。

第一个查询应该更可取,因为它根本不会选择这些记录。

+0

如果这是真的,那么我再次被问到为什么我不能在where子句中使用别名。这是某人(MySQL的作者?)的设计决定,这迫使我写更复杂的查询或失去性能。 – ripper234 2010-11-27 12:17:04

+0

返回结果集后分配别名。这就是为什么他们可以使用条款但不在where条款中。在SQL服务器中,您可以使用派生列,但我不知道Mysql中有任何此类选项。 – 2010-11-27 12:24:48

1

HAVING用于包含GROUP BY或返回包含聚集函数结果的单个行的查询。例如,SELECT SUM(scores) FROM t HAVING SUM(scores) > 100可以返回一行,也可以不返回任何一行。

SQL标准认为第二个查询无效,并且某些数据库系统不接受第二个查询。

相关问题