Thread: Problem with NOT IN portion of query.

Problem with NOT IN portion of query.

From
Robert Creager
Date:
Hey All,

Probably doing something stupid, and I'm too tired to see what.  The query I'm
trying to execute is:

SELECT date_trunc( 'hour', "when" )::timestamp AS
period FROM readings WHERE period NOT IN (SELECT "time" FROM
hour.summary_period) GROUP BY period ORDER BY period;

Where the table definitions are:

CREATE TABLE readings ( "when" TIMESTAMP DEFAULT now() NOT NULL PRIMARY KEY );
CREATE SCHEMA hour;
CREATE TABLE hour.summary_period ( "time" TIMESTAMP NOT NULL );

The error is:

ERROR:  column "period" does not exist

When I remove the NOT IN (and associated WHERE), the query works fine.

Any help?

Cheers,
Rob

-- 20:55:35 up 14 days, 10:45,  4 users,  load average: 2.01, 2.04, 2.05

Re: Problem with NOT IN portion of query.

From
Tomasz Myrta
Date:
Dnia 2004-01-12 05:04, Użytkownik Robert Creager napisał:
> Hey All,
> 
> Probably doing something stupid, and I'm too tired to see what.  The query I'm
> trying to execute is:
> 
> SELECT date_trunc( 'hour', "when" )::timestamp AS
> period FROM readings WHERE period NOT IN (SELECT "time" FROM
> hour.summary_period) GROUP BY period ORDER BY period;
> 
> Where the table definitions are:
> 
> CREATE TABLE readings ( "when" TIMESTAMP DEFAULT now() NOT NULL PRIMARY KEY );
> CREATE SCHEMA hour;
> CREATE TABLE hour.summary_period ( "time" TIMESTAMP NOT NULL );
> 
> The error is:
> 
> ERROR:  column "period" does not exist
> 
> When I remove the NOT IN (and associated WHERE), the query works fine.
Your problem has nothing to "NOT IN".
Your query works fine, when you remove column alias from WHERE clause - 
it's beacause WHERE clause is executed *before* data output (and before 
column aliases). You can still use column aliases in "GROUP BY" and 
"ORDER BY".

Regards,
Tomasz Myrta


Re: Problem with NOT IN portion of query.

From
Robert Creager
Date:
When grilled further on (Mon, 12 Jan 2004 07:28:09 +0100),
Tomasz Myrta <jasiek@klaster.net> confessed:

> Dnia 2004-01-12 05:04, U¿ytkownik Robert Creager napisa³:
> >
> > SELECT date_trunc( 'hour', "when" )::timestamp AS
> > period FROM readings WHERE period NOT IN (SELECT "time" FROM
> > hour.summary_period) GROUP BY period ORDER BY period;
> >
> > The error is:
> >
> > ERROR:  column "period" does not exist
> >
> Your problem has nothing to "NOT IN".
> Your query works fine, when you remove column alias from WHERE clause -
> it's beacause WHERE clause is executed *before* data output (and before
> column aliases). You can still use column aliases in "GROUP BY" and
> "ORDER BY".

Thanks for the info.

So now I have:

SELECT p.period FROM (SELECT date_trunc( 'hour', "when" )::timestamp AS period
FROM readings GROUP BY period) AS p WHERE p.period NOT IN (SELECT "time" FROM
hour.summary_period) ORDER BY p.period;

which appears works as expected.  Anything obviously goofy with the above query?

Cheers,
Rob
-- 05:57:10 up 14 days, 19:47,  4 users,  load average: 2.17, 2.07, 2.04