La raison pour laquelle vous avez eu l'erreur est à cause de l'alias AS X
. Mais le problème est vraiment que vous avez utilisé *
, au lieu de répertorier les champs souhaités.
Dans la première requête, le SELECT *
produit en fait des champs tels que :
A.id, A.name, A.description, B.id, B.name, B.date_started, C.id, C.name, C.isDeleted
Cela fonctionne bien, sauf si vous essayez de référencer directement un champ par son nom et que vous n'utilisez pas son alias. Quoi qu'il en soit, votre moteur SQL n'aura pas de problème avec cela, quoi que vous fassiez avec l'ensemble de résultats, il peut toujours y avoir un problème.
Cependant, lorsque vous déplacez votre requête dans une sous-requête et aliasez les résultats AS X
, alors vous vous retrouvez avec :
X.id, X.name, X.description, X.id, X.name, X.date_started, X.id, X.name, X.isDeleted
Maintenant vous pouvez voir pourquoi il se plaint. Vous pouvez voir pourquoi il est également mauvais d'utiliser*
, car cette combinaison peut fonctionner pendant un certain temps, puis vous ajoutez un nouveau champ à une table existante, qui est identique à une autre table, et bang, chaque requête que vous avez écrite avec ces deux tables doit maintenant être réécrit.