Причината да получите грешката е поради псевдонима AS X
. Но проблемът наистина е, че сте използвали *
, вместо да изброявате полетата, които искате.
В първата заявка SELECT *
всъщност произвежда полета като:
A.id, A.name, A.description, B.id, B.name, B.date_started, C.id, C.name, C.isDeleted
Това работи добре, освен ако не се опитате да посочите поле с неговото име директно и не използвате псевдонима му. Така или иначе вашият SQL двигател няма да има проблем с това, каквото и да правите с набора от резултати, все пак може да има проблем.
Когато обаче преместите заявката си в подзаявка и псевдоним на резултатите AS X
, след което ще получите:
X.id, X.name, X.description, X.id, X.name, X.date_started, X.id, X.name, X.isDeleted
Сега можете да видите защо се оплаква. Можете да видите защо е лошо да използвате *
, тъй като тази комбинация може да работи за известен период от време и след това добавяте ново поле към съществуваща таблица, което е същото като друга таблица, и бам, всяка заявка, която сте написали с двете от тези таблици, сега трябва да бъде пренаписано.