每个派生表都必须有自己的别名
我在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
的表格,loggingcustomers
在stores
购买的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
别名)。