Dear Gnanavel,

(please reply to the lists...)

Indeed it works!

Still, I think it's a bug.

As for this solution being a workaround, it's a bit of pain, since the subselect names (effectively, the included subselects) are not constant.

As for my workaround, I used a condition to not include the last WHERE clause in the query when the inner WHERE clauses are present (since it does nothing).

--
G.


On 2005.05.24. 13:14, Gnanavel Shanmugam wrote:
replace
 WHERE a+b = 3;
with
 WHERE aa.a+aa.b = 3;

(or)
 WHERE bb.a+bb.b = 3;


with regards,
S.Gnanavel



-----Original Message-----
From: [EMAIL PROTECTED]
Sent: Tue, 24 May 2005 12:39:04 +0200
To: pgsql-bugs@postgresql.org, pgsql-sql@postgresql.org
Subject: Re: [SQL] could not devise a query plan

Dear Gurus,

Sorry for upping a 13-month-old thread; please tell if I should've opened
another one.

Here I come again, with another silly join. Please forgive me, but our
queries are built from blocks :)

VERSION: 7.4.6, 7.4.8, 8.0.0rc4 (sorry, no newer installed right now)

ABSTRACT: The following query fails.

        SELECT * FROM
          (SELECT a,b FROM cdqp WHERE a=1 AND b=2) AS aa
          NATURAL FULL JOIN
          (SELECT a,b FROM cdqp WHERE a=1 and b=2) AS bb
        WHERE a+b = 3;

DETAILS: It seems it's something about the redundant WHERE clauses. If I
comment (replace with "WHERE true") any of the three WHERE clauses, it
works.

Session log: See below.

TIA,

--
G.


serv1:tir=> \d cdqp
   Table "pg_temp_20.cdqp"
 Column |  Type   | Modifiers
--------+---------+-----------
 a      | integer |
 b      | integer |

serv1:tir=> SELECT * FROM
serv1:tir->   (SELECT a,b FROM cdqp WHERE a=1 AND b=2) AS aa
serv1:tir->   NATURAL FULL JOIN
serv1:tir->   (SELECT a,b FROM cdqp WHERE a=1 and b=2) AS bb
serv1:tir-> WHERE a+b = 3;
ERROR:  could not devise a query plan for the given query
serv1:tir=> SELECT * FROM
serv1:tir->   (SELECT a,b FROM cdqp WHERE a=1 AND b=2) AS aa
serv1:tir->   NATURAL FULL JOIN
serv1:tir->   (SELECT a,b FROM cdqp WHERE a=1 and b=2) AS bb
serv1:tir-> WHERE true;
 a | b
---+---
 1 | 2
(1 row)

---------------------------(end of broadcast)---------------------------
TIP 9: the planner will ignore your desire to choose an index scan if
your
     joining column's datatypes do not match

---------------------------(end of broadcast)---------------------------
TIP 2: you can get off all lists at once with the unregister command
   (send "unregister YourEmailAddressHere" to [EMAIL PROTECTED])

Reply via email to