每个派生表都必须有自己的别名

我在MySQL上运行这个查询

SELECT ID FROM ( SELECT ID, msisdn FROM ( SELECT * FROM TT2 ) ); 

它给这个错误:

每个派生表都必须有自己的别名。

哪里不对 ?

每个派生表(AKA子查询)的确必须有一个别名。 也就是说,括号中的每个查询都必须被赋予一个别名( AS whatever ),这可以用来在外部查询的其余部分引用它。

 SELECT ID FROM ( SELECT ID, msisdn FROM ( SELECT * FROM TT2 ) AS T ) AS T 

在你的情况,当然,整个查询可以被replace为:

 SELECT ID FROM TT2 

我认为这是要求你这样做:

 SELECT ID FROM (SELECT ID, msisdn FROM (SELECT * FROM TT2) as myalias ) as anotheralias; 

但是,为什么你会首先写这个查询呢?

这里有一个不能重写的别名(不能GROUP BY DISTINCT )。

想象一张名为purchases的表格,loggingcustomersstores购买的stores ,即它是一个多对多的表格,软件需要知道哪些顾客在多个商店进行了购买:

 SELECT DISTINCT customer_id, SUM(1) FROM ( SELECT DISTINCT customer_id, store_id FROM purchases) GROUP BY customer_id HAVING 1 < SUM(1); 

将与错误中断Every derived table must have its own alias 。 修理:

 SELECT DISTINCT customer_id, SUM(1) FROM ( SELECT DISTINCT customer_id, store_id FROM purchases) AS custom GROUP BY customer_id HAVING 1 < SUM(1); 

(请注意AS custom别名)。