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';
我的问题是:这是否也归类为子查询?如果是的话,如果我想避免使用子查询,还有另一种选择吗?
对于“这是否也归类为子查询”这个问题,答案是肯定的。对于避免子查询的问题,最简单的方法是在查询的 where 子句中使用实际的列名。
是的,这里是...
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。