加入 - 表不存在 - SQL

时间:2017-10-23 13:31:25

标签: mysql sql join

有人可以向我解释一下为什么会这样:

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语句复制粘贴到第二部分加入声明。

2 个答案:

答案 0 :(得分:1)

您不能在子查询中引用外部查询,因为解析器开始评估子查询,即在您的情况下

(select age from t1 group by age)

由于表t1不存在,因此不起作用。 由于MySQL没有实现Commom表格表达式(CTE)(它将在Mysql版本8.0中),如果您真的不愿意重复代码,则必须使用派生表或临时表或视图。见this other post

我认为最好的选择只是重复代码。

答案 1 :(得分:0)

您不能在FROM子句中使用别名。