sql >> Database >  >> RDS >> Mysql

MySQL ERROR 1349 Wat mis ik?

Je mist het feit dat weergaven in MySQL geen subquery's toestaan ​​in de from clausule. Ze zijn toegestaan ​​in de select en where en having clausules echter.

De documentatie is vrij duidelijk:

In jouw geval kun je waarschijnlijk de from . herschrijven clausule als een gecorreleerde subquery in de select clausule. Je kunt ook meerdere weergavelagen gebruiken om te doen wat je wilt.

BEWERKEN:

Een SELECT-instructie in SQL heeft de volgende clausules:SELECT , FROM , WHERE , GROUP BY , HAVING , en ORDER BY (volgens de norm). Bovendien voegt MySQL dingen toe zoals LIMIT , en INTO OUTFILE . Je kunt dit zien aan de manier waarop MySQL de SELECT . beschrijft clausule in de documentatie . Je kunt dit ook zien in de documentatie voor bijna elke database.

Bewerkingen zoals join maken deel uit van de FROM clausule (vergelijkbaar met WITH ROLLUP maakt deel uit van de GROUP BY en DESC maakt deel uit van de ORDER BY ). Dit lijken misschien mysterieuze syntactische conventies, maar het wordt belangrijk wanneer er een beperking is zoals die hierboven.

Misschien is een van de redenen voor de verwarring een inspringstijl die als volgt gaat:

select . . .
from t1
inner join t2
     on . . .

Waar de join-instructies op een rij staan ​​onder de select . Dit is misleidend. Ik zou dit schrijven als:

select 
from t1 join
     t2
     on . . .

Alleen de select clausules staan ​​opgesteld onder de select.



  1. Fout met Maven GAE-plug-in + Google Cloud SQL

  2. Is het mogelijk om SQL-injectie (HOOG niveau) te doen op Damn Vulnerable Web App?

  3. MySQL - InnoDB versus MyISAM

  4. GROUP BY retourneer het eerste record