sql >> Database teknologi >  >> RDS >> Mysql

MySQL Duplikatkolonnefejl kun når forespørgslen er pakket som underforespørgsel

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.



  1. Tæl med IF-tilstand i MySQL-forespørgsel

  2. Kræver LIMIT OFFSET,LENGTH ORDER BY for paginering?

  3. Hvad er det korrekte navn for en tilknytningstabel (et mange-til-mange forhold)

  4. Konfigurer MySQL 8 fra Binary Tarball