原始表格“test_table”:
第一步:自连接
select * # 使用*输出所有字段
from test_table t1, test_table t2 where t1.city =t2.city and t2.sales_date=t1.sales_date+1;
得到结果:
第二步:讲自连接查询结果作为from的查询对象
select city, sales_date, a2/a1 增长率
from
(select * # 这里依然使用*输出全部子查询的字段
from test_table t1, test_table t2 where t1.city =t2.city and t2.sales_date=t1.sales_date+1) t;
此时执行语句就会报错:Error Code: 1060. Duplicate column name 'city’
原因:子查询的输出结果中有重复字段“city"
解决办法:在子查询部分的select子句中不要使用”*“输出所有字段(这样就会产生重复字段),而是要单独输出构成自连接临时表的原始表中的不重复字段(这里只输出其中一张表的”city"字段,而另一张表的“city”字段切记不能输出,否则会构成重复字段)。
调整后的代码:
select city, sales_date, a2/a1 增长率
from
(select t1.city,t2.sales_date ,t1.sales_amout a1 ,t2.sales_amout a2 ### 注意:这里只能输出自连接的其中一张表的“city"字段
from test_table t1, test_table t2 where t1.city =t2.city and t2.sales_date=t1.sales_date+1) t;
执行得到的结果: