J'exécute cette requête sur MySQL
SELECT ID FROM (
SELECT ID, msisdn
FROM (
SELECT * FROM TT2
)
);
et c'est donner cette erreur:
Chaque table dérivée doit avoir son propre alias.
Quelle est la cause de cette erreur?
Chaque table dérivée (sous-requête AKA) doit en effet avoir un alias. C'est à dire. chaque requête entre parenthèses doit avoir un alias (AS whatever
), qui peut être utilisé pour s'y référer dans le reste de la requête externe.
SELECT ID FROM (
SELECT ID, msisdn FROM (
SELECT * FROM TT2
) AS T
) AS T
Dans votre cas, bien sûr, l'intégralité de la requête pourrait être remplacée par:
SELECT ID FROM TT2
Je pense que cela vous demande de faire ceci:
SELECT ID
FROM (SELECT ID,
msisdn
FROM (SELECT * FROM TT2) as myalias
) as anotheralias;
Mais pourquoi voudriez-vous écrire cette requête en premier lieu?
Voici un autre exemple qui ne peut pas être réécrit sans alias (ne peut pas GROUP BY DISTINCT
).
Imaginez une table appelée purchases
qui enregistre les achats effectués par customers
à stores
, c’est-à-dire qu’elle est une table plusieurs à plusieurs et que le logiciel doit savoir quels clients ont effectué des achats dans plusieurs magasins:
SELECT DISTINCT customer_id, SUM(1)
FROM ( SELECT DISTINCT customer_id, store_id FROM purchases)
GROUP BY customer_id HAVING 1 < SUM(1);
..will rompre avec l'erreur Every derived table must have its own alias
. Pour réparer:
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);
(Notez le AS custom
alias).