在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';
我的问题是:这也被归类为子查询吗?如果是的话,如果我想避免使用子查询,还有另一种选择吗?
答案 0 :(得分:3)
对于这个问题,"这也被归类为子查询",答案是肯定的。对于避免子查询的问题,最简单的方法是在查询的where子句中使用实际的列名。
答案 1 :(得分:-1)
是的,这是......
SELECT l_n AS last_name FROM contacts HAVING last_name > 'J';
请记住,您的查询将带来所有结果(完整扫描),然后按照您对“条件”的条件进行过滤。
如果您担心性能,则应使用子查询。或者更确切地说:
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。