在写带有子查询或者在查询时产生临时表的查询时,可能会出现这个错误:
ERROR 1248 (42000): Every derived table must have its own alias
意思是「每一个派生出来的表都必须给它命名一个自己的别名」
我们看个例子:
假设有一张「顾客购买记录」的表 - kalacloud_purchases
记录了顾客在商店购物的信息。我们要写个查询,查看哪些客户在多个商店买过东西:
SELECT DISTINCT customer_id, SUM(1) FROM ( SELECT DISTINCT customer_id, store_id FROM kalacloud_purchases) GROUP BY customer_id HAVING 1 < SUM(1);
运行后,可以看到出现 1248 错误:Every derived table must have its own alias
在这段报错代码中:
FROM ( SELECT DISTINCT customer_id, store_id FROM kalacloud_purchases)
这段命令会先查 kalacloud_purchases
表,然后生成一张新的临时表,如果这个临时表没有命名,就会导致 1248 错误。我们只需要加上 「as 临时表别名」即可修复错误
加上「AS customer」别名, 这样就解决了这个问题。