← Back to context

Comment by elygre

9 hours ago

Let me reference fields as I create them:

  select xxxxx as a
       , a * 2 as b

SQL needs to have `select` as the _last_ part, not the first. LINQ has had this for 2 decades by now: "from table_a as a, table_b as b where ... select a.blah, b.duh".

  • This is not relevant to GP's point. This is a separate topic, which... I don't really care, but I know a lot of people want to be able to write SQL as you suggest, and it's not hard to implement, so, sure.

    Though, I think it might have to be table sources, then `SELECT`, then `WHERE`, then ... because you might want to refer to output columns in the `WHERE` clause.

    • WHERE clauses are pushed down into the query planner before the SELECT list is processed, that’s why HAVING exists.

      The logical order, in full, is:

      FROM

      WHERE/JOIN (you can join using WHERE clauses and do FROM a,b still)

      SELECT

      HAVING

    • Ideally, it needs to be "from", then arbitrary number of something like `let` statements that can introduce new variables, maybe interspersed with where-s, and then finally "select".

      "select" can also be replaced with annotations, something like: `from table_1 t1 let t1.column_1 as @output_1 where ...` and then just collect all the @-annotated variables.

      I need to write a lot of SQL, and it's so clumsy. Every time I need a CTE, I have to look into the documentation for the exact syntax.