Używam tego zapytania na MySQL
SELECT ID FROM (
SELECT ID, msisdn
FROM (
SELECT * FROM TT2
)
);
i daje ten błąd:
Każda tabela pochodna musi mieć własny alias.
Co powoduje ten błąd?
)
zapytanie w wielu UNION ALL
s.
Używam tego zapytania na MySQL
SELECT ID FROM (
SELECT ID, msisdn
FROM (
SELECT * FROM TT2
)
);
i daje ten błąd:
Każda tabela pochodna musi mieć własny alias.
Co powoduje ten błąd?
)
zapytanie w wielu UNION ALL
s.
Odpowiedzi:
Każda tabela pochodna (zapytanie podrzędne AKA) musi rzeczywiście mieć alias. Oznacza to, że każde zapytanie w nawiasach musi mieć alias ( AS whatever
), którego można użyć do odwołania się do niego w pozostałej części zapytania zewnętrznego.
SELECT ID FROM (
SELECT ID, msisdn FROM (
SELECT * FROM TT2
) AS T
) AS T
W twoim przypadku oczywiście całe zapytanie można zastąpić:
SELECT ID FROM TT2
AS
instrukcje. Myślałem, że pokazałeś tylko stenografię. usunąłem moją opinię.
SELECT...FROM...WHERE x NOT IN (subquery) AS T
spowodują błąd
Myślę, że prosi cię o to:
SELECT ID
FROM (SELECT ID,
msisdn
FROM (SELECT * FROM TT2) as myalias
) as anotheralias;
Ale dlaczego miałbyś pisać to zapytanie?
Oto inny przykład, którego nie można przepisać bez aliasów (nie można GROUP BY DISTINCT
).
Wyobraź sobie tabelę, purchases
która rejestruje zakupy dokonane przez customers
at stores
, tzn. Jest to tabela od wielu do wielu, a oprogramowanie musi wiedzieć, którzy klienci dokonali zakupów w więcej niż jednym sklepie:
SELECT DISTINCT customer_id, SUM(1)
FROM ( SELECT DISTINCT customer_id, store_id FROM purchases)
GROUP BY customer_id HAVING 1 < SUM(1);
... zepsuje się z błędem Every derived table must have its own alias
. Naprawić:
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);
(Zwróć uwagę na AS custom
alias).