problem with 'insert into...'

From: "William D(dot) McCoy" <wdmccoy(at)geo(dot)umass(dot)edu>
To: pgsql-sql(at)postgreSQL(dot)org
Subject: problem with 'insert into...'
Date: 1998-06-23 19:25:32
Message-ID: 199806231925.PAA15195@aeolus.geo.umass.edu
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-sql

I am trying to work around the lack of an outer join function in
postgreSql. I am trying to construct a full outer join of two
identically defined tables, each of which contains (along with other
data), a value for a particular lab sample.

I have come across the following problem. When I execute the
following query it returns the expected result (816 rows returned).

select f.lab_no, f.prep_no, avg(f.fai), NULL, f.peak_values
from free_ratios f
where not exists (
select *
from hyd_ratios h
where h.lab_no = f.lab_no
and h.prep_no = f.prep_no
and h.run_no = f.run_no
)
group by f.peak_values, f.lab_no, f.prep_no;

However, when I add an 'insert into table_name' to the query like
this:

insert into both_ratios_avg
select f.lab_no, f.prep_no, avg(f.fai), NULL, f.peak_values
from free_ratios f
where not exists (
select *
from hyd_ratios h
where h.lab_no = f.lab_no
and h.prep_no = f.prep_no
and h.run_no = f.run_no
)
group by f.peak_values, f.lab_no, f.prep_no;

I get the following error message:

ERROR: parser: aggregates not allowed in GROUP BY clause

There are clearly no aggregates in my GROUP BY clause.

I get the same error message with the following query, although, just
like the example above, the select by itself works fine:

insert into both_ratios_avg
select f.lab_no, f.prep_no, avg(fai), avg(hai), f.peak_values
from free_ratios f, hyd_ratios h
where f.lab_no = h.lab_no
and f.prep_no = h.prep_no
and f.run_no = h.run_no
group by f.peak_values, f.lab_no, f.prep_no;

Just to make things more interesting, the following very similar query
works fine and does not give any error:

insert into both_ratios_avg
select h.lab_no, h.prep_no, NULL, avg(hai), h.peak_values
from hyd_ratios h
where not exists (
select *
from free_ratios f
where f.lab_no = h.lab_no
and f.prep_no = h.prep_no
and f.run_no = h.run_no
)
group by h.peak_values, h.lab_no, h.prep_no;

(This is another third of my full outer join workaround.) Any ideas
about what might be happening here?

--
William D. McCoy
Geosciences
University of Massachusetts
Amherst, MA 01003

Responses

Browse pgsql-sql by date

  From Date Subject
Next Message Michael Yeung 1998-06-24 04:31:25 ODBC Failure
Previous Message Dionisio Barrantes Blanco 1998-06-23 14:15:44 foreign keys