On Wed, Aug 14, 2013 at 12:01 PM, Richard Hipp <d...@sqlite.org> wrote:
>
> Consider the following SQL:
>
> ---------------------------------------------------
> CREATE TABLE t1(m VARCHAR(4));
> INSERT INTO t1 VALUES('az');
> INSERT INTO t1 VALUES('by');
> INSERT INTO t1 VALUES('cx');
>
> SELECT '1', substr(m,2) AS m
>   FROM t1
>  ORDER BY m;
>
> SELECT '2', substr(m,2) AS m
>   FROM t1
>  ORDER BY lower(m);
> ---------------------------------------------------
>
> Using PostgreSQL 9.1.5, the first query returns x-y-z while the second 
> returns z-y-x.  Is this "correct"?  It certainly is surprising to me.
>
> I'm asking because the same question has come up in SQLite and whenever there 
> is a language dispute in SQLite, our first instinct is to find out what 
> PostgreSQL does and try to do the same thing.  SQLite version 3.7.15 was 
> behaving the same way as PostgreSQL 9.1.5 (unbeknownst to us at the time).  
> Then a bug was written about the inconsistent behavior of ORDER BY.  We fixed 
> that bug so that the latest SQLite answers x-y-z in both cases.  Now someone 
> is complaining that the "fix" was really a 'break".  Is it?  Or is there an 
> equivalent bug in PostgreSQL?
>
> There are, of course, many ways to resolve the ambiguity (such as using a 
> unique label for the result column, or by saying "t1.m" instead of just "m" 
> when you mean the column of the table).  But that is not really the point 
> here.  The question is, how should symbolic names in the ORDER BY clause be 
> resolved?  Should column names in the source table take precedence over 
> result column name, or should it be the other way around?
>
> Any insights are appreciated.  Please advise if a different mailing list 
> would be more appropriate for this question.

My guess without testing is that order by lower(m) is not what you think it is.

substr(m,2) as m

is bad form. Always use a new and unique alias, like m1.  How does this work:

SELECT '2', substr(m,2) AS m1
  FROM t1
 ORDER BY lower(m1);


-- 
Sent via pgsql-general mailing list (pgsql-general@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-general

Reply via email to