sql >> Databáze >  >> RDS >> Mysql

Neznámý sloupec v 'seznamu polí', když je zástupný symbol připraveného příkazu v poddotazu

Vaše poslední úprava udělala otázku velmi jasnou, takže se pokusím odpovědět:příčinou tohoto rozdílu je zástupný symbol.

Jak je zdokumentováno zde , zástupné symboly lze použít pouze na určitých místech v dotazu. Konkrétně:

Možná jste si všimli, že SELECT ? as x připraví se dobře, ale ne SELECT nr.x FROM (SELECT ? AS x) AS nr . proč tomu tak je? To nejlépe vysvětluje anonymní autor dokumentu PHP , tak mi dovolte zkopírovat/vložit:

Jednoduše řečeno:protože v poddotazu v FROM používáte zástupný symbol klauzule, MySQL nemůže vypočítat plán provádění dotazu.

Jinými slovy, protože se váš dotaz vždy změní, neexistuje žádná „šablona“, která by na něj mohla být připravena.

Pokud tedy opravdu chcete použít tento dotaz, musíte použít normální (nepřipravený) dotaz nebo znovu zapnout emulované připravené příkazy PDO.

Jak již bylo řečeno, zvažte prosím různé alternativy nabízené v sekci komentářů. Pro to, čeho se snažíte dosáhnout, existují mnohem lepší řešení.




  1. Kontingenční tabulka s nekardinálními hodnotami

  2. Porovnání řešení Oracle RAC HA s Galera Cluster pro MySQL nebo MariaDB

  3. Načítání data na serveru SQL, CURRENT_TIMESTAMP vs GetDate()

  4. Funkce MONTHS_BETWEEN() v Oracle