Re: Converting from MS Access field aliases

Поиск
Список
Период
Сортировка
От Nicholas Barr
Тема Re: Converting from MS Access field aliases
Дата
Msg-id 56317.62.244.190.66.1184255716.squirrel@www.chuckie.co.uk
обсуждение исходный текст
Ответ на Converting from MS Access field aliases  (Joel Richard <postgres@joelrichard.com>)
Список pgsql-sql
> Good morning,
>
> Oh joyous day! We are upgrading a legacy database system from MS
> Access to PostgreSQL! Yay!
>
> Ok, rejoicing over. Here's our issue and PLEASE point me to the right
> place if this has been discussed before.
>
> In MS Access one can reuse field aliases later in the same query. For
> example:
>
>    SELECT field1 / 2 AS foo,
>           field2 * 2 AS bar,
>           foo + bar AS total
>    WHERE foo < 12;
>
> The first two fields are fine, it's the third that's a problem. The
> database reports
>
>    ERROR:  column "foo" does not exist
>
> This type of situation is happening -many- times in well over fifty
> existing SELECT..INTO and INSERT INTO queries. The obvious solution
> here is to copy the code around to eliminate the need to reuse "foo"
> and "bar" in the query:
>
>    SELECT field1 / 2 AS foo,
>           field2 * 2 AS bar,
>           (field1 / 2) + (field2 * 2) AS total
>    WHERE (field1 / 2) < 12;
>
> But this is a bit ugly and cumbersome and in our case, not desirable
> since foo and bar get used many times in the remains of the query. To
> replace them with the formulae means that debugging is quite
> difficult and very prone to errors.
>
> Does anyone have suggestions on how to circumvent this in a more
> graceful manner? I mean I could probably find a way to do this with a
> couple of queries and some views, or maybe write a function (or more
> like 30 functions) to do the work, but both of those only add to the
> workload in an undesirable manner. :)
>
> To complicate matters, performance is a concern. We're operating on
> upwards of a billion records. Not all at the same time, but the goal
> is to run these  a series of calculations will be done on all of the
> data.
>
> Thanks for any input that you might have.
>
> --Joel

Are you able to restructure your queries to be something like...?

SELECTt2.foo + t2.bar
FROM(    SELECT        field1 / 2 AS foo,        field2 * 2 AS bar    FROM        table1 t1    WHERE        foo < 12)
ASt2
 

PG allows sub-clauses and statements in the FROM clause, as well as in the
WHERE & SELECT clauses.

Not sure how these will perform on a billion rows, so a few EXPLAIN
ANALYSE outputs might help tune the queries some more if you have them.
The results should be semantically comparable to the MS Access queries
though (I think).

Nick




В списке pgsql-sql по дате отправления:

Предыдущее
От: Tom Lane
Дата:
Сообщение: Re: Using case or if to return multiple rows
Следующее
От: chester c young
Дата:
Сообщение: Re: Converting from MS Access field aliases