有人可以向我解释一下为什么会这样:
select t1.id, t1.age
from mytable t1
join (select age
from mytable
group by age) t2
on t1.age = t2.age
在连接语句的第二部分中使用t1,如此
select t1.id, t1.age
from mytable t1
join (select age
from t1
group by age) t2
on t1.age=t2.age
给我一个错误?
ERROR 1146 (42S02) at line 17: Table '[...].t1' doesn't exist
在我的实际问题中,mytable
对应于一个选择,因此我想使用t1
以避免将整个select ... from etc
语句复制粘贴到第二部分加入声明。
答案 0 :(得分:1)
您不能在子查询中引用外部查询,因为解析器开始评估子查询,即在您的情况下
(select age from t1 group by age)
由于表t1不存在,因此不起作用。 由于MySQL没有实现Commom表格表达式(CTE)(它将在Mysql版本8.0中),如果您真的不愿意重复代码,则必须使用派生表或临时表或视图。见this other post
我认为最好的选择只是重复代码。
答案 1 :(得分:0)
您不能在FROM子句中使用别名。