sql >> Databáze >  >> RDS >> Oracle

ORA-00904 neplatný identifikátor na dekódovacím aliasu

Z dokumentace (zvýraznění přidáno):

Můžete použít alias sloupce c_alias , k označení bezprostředně předcházejícího výrazu ve výběrovém seznamu, aby se sloupec zobrazil s novým záhlavím. Alias ​​efektivně přejmenuje položku seznamu výběru po dobu trvání dotazu. Alias ​​lze použít vORDER BY klauzule, ale ne jiné klauzule v dotazu.

Takže nemůžete odkazovat na alias v where klauzule, kde v tuto chvíli máte:

...
AND (account_amt NOT BETWEEN ...
...

Alias ​​v tomto okamžiku není platný, takže hledá sloupec s tímto názvem v jedné z tabulek a žádný nenajde. V order by je to v pořádku ačkoli.

Buď musíte nahradit alias opakovaným decode nebo případně použijte poddotaz a poté odkazujte na alias v where klauzule ve vnějším dotazu, ale to může být méně účinné v závislosti na tom, jak selektivní jsou vaše ostatní podmínky.



  1. SQL dotaz pro rozdělení dat sloupců do řádků

  2. Jak bezpečné je vlákno EnableWriteAheadLogging v kontextu skutečného použití a dokumentace SQLite?

  3. Jak funguje last_insert_rowid() v SQLite

  4. Upozornění:mysqli_query() očekává, že parametr 1 bude mysqli, daný zdroj