Grunden til, at du fik fejlen, er på grund af aliasset AS X
. Men problemet er virkelig, at du brugte *
, i stedet for at angive de felter, du ønsker.
I den første forespørgsel, SELECT *
producerer faktisk felter som:
A.id, A.name, A.description, B.id, B.name, B.date_started, C.id, C.name, C.isDeleted
Dette fungerer fint, medmindre du prøver at referere til et felt ved dets navn direkte og ikke bruger dets alias. Uanset hvad vil din SQL-motor ikke have et problem med dette, uanset hvad du gør med resultatsættet kan der dog stadig være et problem.
Men når du flytter din forespørgsel til en underforespørgsel og kalder resultaterne AS X
, så ender du med:
X.id, X.name, X.description, X.id, X.name, X.date_started, X.id, X.name, X.isDeleted
Nu kan du se, hvorfor den klager. Du kan se, hvorfor det også er dårligt at bruge*
, fordi denne kombination kan fungere i et stykke tid, og så tilføjer du et nyt felt til en eksisterende tabel, det er det samme som en anden tabel, og bang, hver forespørgsel du har skrevet med begge disse tabeller, skal nu omskrevet.