sql >> Database >  >> RDS >> Mysql

Onbekende kolom in 'veldlijst' wanneer de tijdelijke aanduiding van de voorbereide instructie zich in de subquery bevindt

Je laatste bewerking heeft de vraag heel duidelijk gemaakt, dus ik zal proberen een antwoord te geven:de oorzaak van dit verschil is de tijdelijke aanduiding.

Zoals gedocumenteerd hier , kunnen tijdelijke aanduidingen alleen op bepaalde plaatsen in de zoekopdracht worden gebruikt. In het bijzonder:

Nu is het je misschien opgevallen dat SELECT ? as x bereidt prima voor, maar niet SELECT nr.x FROM (SELECT ? AS x) AS nr . Waarom is dat? Dit wordt het best uitgelegd door een anonieme auteur op PHP's doc , dus laat me kopiëren/plakken:

Simpel gezegd:omdat je een tijdelijke aanduiding gebruikt in een subquery in de FROM clausule, MySQL kan het uitvoeringsplan van de query niet berekenen.

Met andere woorden, aangezien uw zoekopdracht altijd zal veranderen, is er geen "sjabloon" die erop kan worden voorbereid.

Als u deze query dus echt wilt gebruiken, moet u een normale (niet-voorbereide) query gebruiken of de geëmuleerde voorbereide instructies van PDO weer inschakelen.

Dat gezegd hebbende, overweeg alstublieft de verschillende alternatieven die worden aangeboden in de opmerkingensectie. Er zijn veel betere oplossingen voor wat u probeert te bereiken.




  1. Hoe kom ik achter de _exact_ fout van SQL Server?

  2. MySQL - Hoe te verwijderen uit een tabel wanneer geneste select die tabel gebruikt?

  3. Uitzondering in JPA bij gebruik van seed-bestand voor PostgreSQL

  4. Oracle SQL PIVOT-tabel