假设您有两个包含列的表:
现在我可以写一些类似的东西(我知道这可以用不同的方式编写,效率更高,等等,而不是那些):
SELECT t1.data,
(SELECT count(*)
FROM table2 t2
WHERE t2.t1_ref = t1.id) AS nested_result
FROM table1 t1;
我的问题是,我在哪里可以在主要查询的其余部分中使用'nested_result' ?我可以在FROM中使用它(例如在另一个嵌套选择中)吗?还是在WHERE?或者在GROUP BY?或者在ORDER BY上?其他地方?
例如,MySQL似乎不喜欢:
SELECT t1.data,
(SELECT count(*)
FROM table2 t2
WHERE t2.t1_ref = t1.id) AS nested_result
FROM table1 t1
WHERE nested_result > 100;
但这里的一般规则是什么?
答案 0 :(得分:2)
nested_result
是列别名。
您可以在group by
,having
和order by
条款中使用它。
您可以将整个语句放在子查询中,并在外部查询中使用它。
以下是documentation中的参考:
以下列表提供了有关其他SELECT的其他信息 子句:
可以使用AS alias_name为select_expr指定别名。别名是 用作表达式的列名,可以在GROUP BY中使用, ORDER BY或HAVING子句。例如:
SELECT CONCAT(last_name,', ',first_name) AS full_name FROM mytable ORDER BY full_name;
编辑:
对于您的特定示例,您可以将where
更改为having
:
SELECT t1.data,
(SELECT count(*)
FROM table2 t2
WHERE t2.t1_ref = t1.id
) AS nested_result
FROM table1 t1
HAVING nested_result > 100;
这是MySQL扩展,在其他数据库中不起作用。尽管我不喜欢它,但我不得不承认它很方便。