Sql Fun: Order before Group with a Sub Query

I have came across a problem within a SQL statement. Say we have 2 tables which are in a 1:n relationship. So we want to join them together normally the SQL engine will just use the first match based on the auto increment key within the table. This isn’t what I needed so I searched a way to actually sort the data before the grouping happened. The solution seems to be a sub query which isn’t ideal performance wise but worked for my use case. So I ended up with something like this:

SELECT * FROM (
    SELECT lastname, firstname, address_addition FROM address
    LEFT JOIN othertable ON address.somefield = othertable.somefield
    ORDER BY whatever
) as addresses GROUP BY addresses.address_id

Which brought me to the next problem, the SQL standard doesn’t allow duplicate column names within a sub query and mysql does actually implement this part of the standard – surprise ;)

So I had to “retag” a few fields in the selected clause with AS. Lesson learned: always use a short table prefix.

Marc