我在MySQL上运行此查询
SELECT ID FROM (
SELECT ID, msisdn
FROM (
SELECT * FROM TT2
)
);
它给出了这个错误:
每个派生表必须具有自己的别名。
是什么导致此错误?
#1楼
这是一个不同的例子,没有别名就不能重写(不能GROUP BY DISTINCT )。
想象一下一个称为purchases的表,该表记录了customers在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别名)。
#2楼
我认为这是在要求您这样做:
SELECT ID
FROM (SELECT ID,
msisdn
FROM (SELECT * FROM TT2) as myalias
) as anotheralias;
但是,为什么首先要编写此查询?
#3楼
每个派生表(AKA子查询)确实必须有一个别名。 也就是说,括号中的每个查询都必须被赋予一个别名( AS whatever ),可以在外部查询的其余部分中使用它来引用它。
SELECT ID FROM (
SELECT ID, msisdn FROM (
SELECT * FROM TT2
) AS T
) AS T
当然,对于您而言,整个查询可以替换为:
SELECT ID FROM TT2