Oracle: sub select with AS, COALESCE, GROUP BY, HAVING CASE WHEN and ORDER BY

The question:

I am typing the below code and it is returning me “ORA-00923: FROM keyword not found where expected”. What is happening?

    SELECT
       max(alias.id) AS "id",
       (SELECT alias.name FROM EXAM WHERE alias.id = alias.id ) AS "REF",
       alias.name
      
       
       FROM EXAM alias
       GROUP BY alias.name
       ORDER BY alias.name ASC;

Here’s a fiddle: http://sqlfiddle.com/#!4/537e2/1

The Solutions:

Below are the methods you can try. The first solution is probably the best. Try others if the first one doesn’t work. Senior developers aren’t just copying/pasting – they read the methods carefully & apply them wisely to each case.

Method 1

'COLUMN PREFIX' is a scalar string, not a valid (alias) column name. Oracle (flagship, not MySQL) uses Double Quotes for such object names. (The ORA error indicates you are using the flagship product)

Oracle does not distinguish between NULL and ''. anything compared to NULL is unknown. Your case statement will always go to the else clause.

I don’t think Oracle allows you to use a column alias in the having or group by clause. I can’t test right now.


All methods was sourced from stackoverflow.com or stackexchange.com, is licensed under cc by-sa 2.5, cc by-sa 3.0 and cc by-sa 4.0

Leave a Comment