1

A在列列表WHERE之前首先被评估。SELECT结果如下:

SELECT l_n AS last_name FROM contacts WHERE last_name > 'J';

不能工作。
以下将起作用:

SELECT * FROM (SELECT l_n AS last_name FROM contacts) tmp WHERE last_name > 'J';

我的问题是:这是否也归类为子查询?如果是的话,如果我想避免使用子查询,还有另一种选择吗?

4

2 回答 2

3

对于“这是否也归类为子查询”这个问题,答案是肯定的。对于避免子查询的问题,最简单的方法是在查询的 where 子句中使用实际的列名。

于 2013-04-14T14:43:25.340 回答
-1

是的,这里是...

SELECT l_n AS last_name FROM contacts HAVING last_name > 'J';

请记住,您的查询将带来所有结果(完整扫描),然后根据您的条件过滤 Have 子句。

如果您担心性能,您应该使用子查询。更确切地说:

SELECT l_n AS last_name FROM contacts HAVING l_n > 'J';

[编辑]

嘿,伙计,是的,它没有聚合功能。这是一个例子:

mysql> select * from blah;
+----+---------+
| id | name    |
+----+---------+
|  1 | renato  |
|  2 | rodrigo |
+----+---------+
2 rows in set (0.00 sec)


mysql> select id as a1, name as a2 from blah having a1 > 1;
+----+---------+
| a1 | a2      |
+----+---------+
|  2 | rodrigo |
+----+---------+
1 row in set (0.00 sec)

我的数据库是 5.5.29-0ubuntu0.12.04.2。

于 2013-04-14T12:09:40.597 回答