Powodem wystąpienia błędu jest aliasing AS X
. Ale tak naprawdę problem polega na tym, że użyłeś *
, zamiast wymieniać żądane pola.
W pierwszym zapytaniu SELECT *
faktycznie tworzy pola takie jak:
A.id, A.name, A.description, B.id, B.name, B.date_started, C.id, C.name, C.isDeleted
Działa to dobrze, chyba że próbujesz odwoływać się bezpośrednio do pola poprzez jego nazwę i nie używasz jego aliasu. Tak czy inaczej, twój silnik SQL nie będzie miał z tym problemu, cokolwiek robisz z zestawem wyników, może nadal mieć problem.
Jednak gdy przeniesiesz zapytanie do podzapytania i aliasujesz wyniki AS X
, wtedy otrzymujesz:
X.id, X.name, X.description, X.id, X.name, X.date_started, X.id, X.name, X.isDeleted
Teraz możesz zobaczyć, dlaczego narzeka. Możesz zobaczyć, dlaczego używanie *
jest również złe , ponieważ ta kombinacja może działać przez pewien czas, a potem dodajesz nowe pole do istniejącej tabeli, które jest takie samo jak inna tabela i bang, każde zapytanie, które napisałeś z obu tych tabel, teraz musi być przepisany.