Thread: Re(2): optimize sql

Re(2): optimize sql

From
pgsql-sql@fc.emc.com.ph (pgsql-sql)
Date:
reedstrm@rice.edu writes:
>How does the output of the above differ from:
>
>SELECT name FROM office, office_application 
>WHERE code = office_code 
>AND active != 't';
>
>Without knowing the table structures (which tables to active, code, 
>and office_code belong to?) it's hard to suggest much else.
>
>Ross


The name and code fields belong to office table. While
office_code and active fields belong to office_application table.
The name field have duplicates and among the duplicates,
only one active field is TRUE. I just wanted to get name field
that has no TRUE active field. Any other idea? Thanks.

sherwin



RE: Re(2): optimize sql

From
Henry Lafleur
Date:
If you know that 't' will always be the highest character in the active
field for all records:

SELECT name FROM office, office_application
WHERE code = office_code
GROUP BY name
HAVING MAX(active) < 't'

Of course, if you have an active that is 'z' for example, then this won't
work. I think this should work also regardless of max(active) for the table:

SELECT name FROM office, office_application
WHERE code = office_code AND active <= 't'
GROUP BY name
HAVING MAX(active) < 't'
UNION
SELECT name FROM office, office_application
WHERE code = office_code AND active >= 't'
GROUP BY name
HAVING MIN(active) > 't'

Henry


-----Original Message-----
From: pgsql-sql@fc.emc.com.ph [mailto:pgsql-sql@fc.emc.com.ph]
Sent: Wednesday, July 26, 2000 9:40 PM
To: pgsql-sql@postgresql.org; reedstrm@rice.edu
Subject: Re(2): [SQL] optimize sql


reedstrm@rice.edu writes:
>How does the output of the above differ from:
>
>SELECT name FROM office, office_application 
>WHERE code = office_code 
>AND active != 't';
>
>Without knowing the table structures (which tables to active, code, 
>and office_code belong to?) it's hard to suggest much else.
>
>Ross


The name and code fields belong to office table. While
office_code and active fields belong to office_application table.
The name field have duplicates and among the duplicates,
only one active field is TRUE. I just wanted to get name field
that has no TRUE active field. Any other idea? Thanks.

sherwin


Re: RE: Re(2): optimize sql

From
pgsql-sql@fc.emc.com.ph (pgsql-sql)
Date:
but active is a boolean field.

HLafleur@phoenixforge.com writes:
>If you know that 't' will always be the highest character in the active
>field for all records:
>
>SELECT name FROM office, office_application
>WHERE code = office_code
>GROUP BY name
>HAVING MAX(active) < 't'
>
>Of course, if you have an active that is 'z' for example, then this won't
>work. I think this should work also regardless of max(active) for the
>table:
>
>SELECT name FROM office, office_application
>WHERE code = office_code AND active <= 't'
>GROUP BY name
>HAVING MAX(active) < 't'
>UNION
>SELECT name FROM office, office_application
>WHERE code = office_code AND active >= 't'
>GROUP BY name
>HAVING MIN(active) > 't'
>
>Henry
>
>
>-----Original Message-----
>From: pgsql-sql@fc.emc.com.ph [mailto:pgsql-sql@fc.emc.com.ph]
>Sent: Wednesday, July 26, 2000 9:40 PM
>To: pgsql-sql@postgresql.org; reedstrm@rice.edu
>Subject: Re(2): [SQL] optimize sql
>
>
>reedstrm@rice.edu writes:
>>How does the output of the above differ from:
>>
>>SELECT name FROM office, office_application 
>>WHERE code = office_code 
>>AND active != 't';
>>
>>Without knowing the table structures (which tables to active, code, 
>>and office_code belong to?) it's hard to suggest much else.
>>
>>Ross
>
>
>The name and code fields belong to office table. While
>office_code and active fields belong to office_application table.
>The name field have duplicates and among the duplicates,
>only one active field is TRUE. I just wanted to get name field
>that has no TRUE active field. Any other idea? Thanks.
>
>sherwin




RE: RE: Re(2): optimize sql

From
Henry Lafleur
Date:
I'm kind of new to pgsql, but as long as MAX works for boolean fields, they
you can just change the first query below with:

HAVING MAX(active) != 't'

but it seems that pgsql can have user defined aggregates, so you could
define a function that computes the MAX of a boolean and define true to be
the max.

Henry


-----Original Message-----
From: pgsql-sql@fc.emc.com.ph [mailto:pgsql-sql@fc.emc.com.ph]
Sent: Thursday, July 27, 2000 9:28 PM
To: HLafleur@phoenixforge.com; pgsql-sql@postgresql.org
Subject: Re: RE: Re(2): [SQL] optimize sql


but active is a boolean field.

HLafleur@phoenixforge.com writes:
>If you know that 't' will always be the highest character in the active
>field for all records:
>
>SELECT name FROM office, office_application
>WHERE code = office_code
>GROUP BY name
>HAVING MAX(active) < 't'
>
>Of course, if you have an active that is 'z' for example, then this won't
>work. I think this should work also regardless of max(active) for the
>table:
>
>SELECT name FROM office, office_application
>WHERE code = office_code AND active <= 't'
>GROUP BY name
>HAVING MAX(active) < 't'
>UNION
>SELECT name FROM office, office_application
>WHERE code = office_code AND active >= 't'
>GROUP BY name
>HAVING MIN(active) > 't'
>
>Henry
>
>
>-----Original Message-----
>From: pgsql-sql@fc.emc.com.ph [mailto:pgsql-sql@fc.emc.com.ph]
>Sent: Wednesday, July 26, 2000 9:40 PM
>To: pgsql-sql@postgresql.org; reedstrm@rice.edu
>Subject: Re(2): [SQL] optimize sql
>
>
>reedstrm@rice.edu writes:
>>How does the output of the above differ from:
>>
>>SELECT name FROM office, office_application 
>>WHERE code = office_code 
>>AND active != 't';
>>
>>Without knowing the table structures (which tables to active, code, 
>>and office_code belong to?) it's hard to suggest much else.
>>
>>Ross
>
>
>The name and code fields belong to office table. While
>office_code and active fields belong to office_application table.
>The name field have duplicates and among the duplicates,
>only one active field is TRUE. I just wanted to get name field
>that has no TRUE active field. Any other idea? Thanks.
>
>sherwin