sil*_*kid 359 mysql subquery mysql-error-1248 mysql-dependent-subquery
我在MySQL上运行此查询
SELECT ID FROM (
SELECT ID, msisdn
FROM (
SELECT * FROM TT2
)
);
Run Code Online (Sandbox Code Playgroud)
并且它给出了这个错误:
每个派生表都必须有自己的别名.
是什么导致了这个错误?
Pau*_*aul 506
每个派生表(AKA子查询)必须确实具有别名.即括号中的每个查询都必须给出一个别名(AS whatever
),可以用来在外部查询的其余部分中引用它.
SELECT ID FROM (
SELECT ID, msisdn FROM (
SELECT * FROM TT2
) AS T
) AS T
Run Code Online (Sandbox Code Playgroud)
当然,在您的情况下,整个查询可以替换为:
SELECT ID FROM TT2
Run Code Online (Sandbox Code Playgroud)
hom*_*ast 74
我想这要求你这样做:
SELECT ID
FROM (SELECT ID,
msisdn
FROM (SELECT * FROM TT2) as myalias
) as anotheralias;
Run Code Online (Sandbox Code Playgroud)
但是你为什么要首先写这个查询呢?
小智 13
这是一个不同的例子,没有别名就不能重写(不能GROUP BY DISTINCT
).
想象一下一张名为at的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);
Run Code Online (Sandbox Code Playgroud)
..将打破错误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);
Run Code Online (Sandbox Code Playgroud)
(注意AS custom
别名).
Sbp*_*pro 12
我到达这里是因为我认为我应该检查是否有足够的答案,在语法错误给我这个错误之后,或者我是否可以自己发布答案。
好的,这里的答案解释了这个错误是什么,所以不用多说,但尽管如此,我还是会用我自己的话给出我的 2 美分:
此错误是由于您基本上使用该FROM
命令的子查询生成一个新表而引起的。
这就是 a derived table
,因此,它需要有一个alias
(实际上是对其的名称引用)。
给出以下假设查询:
SELECT id, key1
FROM (
SELECT t1.ID id, t2.key1 key1, t2.key2 key2, t2.key3 key3
FROM table1 t1
LEFT JOIN table2 t2 ON t1.id = t2.id
WHERE t2.key3 = 'some-value'
) AS tt
Run Code Online (Sandbox Code Playgroud)
最后,命令内的整个子查询FROM
将生成别名为的表tt
,并且它将具有以下列id
, key1
, key2
, key3
。
然后,对于初始的,我们最终从生成的表 ( ) 中SELECT
选择id
和。key1
tt