Důvodem, proč se vám zobrazila chyba, je aliasing AS X
. Ale problém je opravdu v tom, že jste použili *
, namísto výpisu požadovaných polí.
V prvním dotazu SELECT *
ve skutečnosti produkuje pole jako:
A.id, A.name, A.description, B.id, B.name, B.date_started, C.id, C.name, C.isDeleted
To funguje dobře, pokud se nepokusíte odkazovat na pole přímo jeho názvem a nepoužijete jeho alias. Ať tak či onak, váš SQL engine s tím nebude mít problém, ať už děláte se sadou výsledků cokoli, stále může mít problém.
Když však přesunete dotaz do poddotazu a alias, výsledky AS X
, pak skončíte s:
X.id, X.name, X.description, X.id, X.name, X.date_started, X.id, X.name, X.isDeleted
Nyní vidíte, proč si stěžuje. Můžete vidět, proč je také špatné používat *
, protože tato kombinace může nějakou dobu fungovat, a pak do existující tabulky přidáte nové pole, které je stejné jako jiná tabulka, a prásk, každý dotaz, který jste napsali s oběma těmito tabulkami, nyní musí být přepsáno.