Re: Odd error in complex query (7.2): Sub-SELECT

Поиск
Список
Период
Сортировка
От Masaru Sugawara
Тема Re: Odd error in complex query (7.2): Sub-SELECT
Дата
Msg-id 20011030233825.4028.RK73@echna.ne.jp
обсуждение исходный текст
Ответ на Re: Odd error in complex query (7.2): Sub-SELECT  (Philip Warner <pjw@rhyme.com.au>)
Список pgsql-hackers
On Tue, 30 Oct 2001 11:49:28 +1100
Philip Warner wrote:

> 
> It's not clear to me that it should be illegal - for every row in s1, it
> should return the result of the column-select (which may be NULL) - or is
> that what 'not flattening the query' does?
> 
> >We
> >already do that for certain conditions; we just have to figure out what
> >additional restriction should be used to preclude this case.  The
> >restriction should be as tight as possible to avoid losing the ability
> >to optimize queries using views.
> 
> How about whenenever it will throw this error? ;-).,
> 
> >A simplistic idea is to not pull up views that contain subselects in
> >the targetlist, but I have a feeling that's not the right restriction.
> 
> That does seem excessive. I'm way over my head here, but can a column
> select be implemented as a special JOIN that always returns 1 row (maybe
> NULL), and throws an error if more than one row? 
> 

Hi,

I wouldn't think most people need a query like this, but also
had been in puzzle as to how not to pull up. Finally the 
problem could be solved by using a statement of an ORDER BY.
Therefore, if you add an ORDER BY to a view of your complex
query, it will work correctly. 

And, as long as each of correlative subselects which are 
in columns always returns one row, I feel it is legal 
rather than illegal that its subselects can be GROUPed.



-- on 7.1.2

create table t1(n text, f1 int, f2 int);
create table g1(n text, t1n text);
create table s1(k1 text, f1a int, f1b int, f2 int, x int, d timestamp);


create view v1 as
select k1, d,    (select g1.n from g1, t1         where g1.t1n=t1.n and t1.f1 = s1.f1a and t1.f2 = s1.f2 limit 1) as a,
  (select g1.n from g1, t1         where g1.t1n=t1.n and t1.f1 = s1.f1b and t1.f2 = s1.f2 limit 1) as b,     x   from
s1  order by 1   -- *** an additional statement ***
 
;


explain
select coalesce(a, b, 'other') as name, k1, sum(x) as tot   from v1   where d > '28-oct-2001 12:00' and d <
current_timestamp  group by 1,2   order by tot desc limit 40;
 




Regards,
Masaru Sugawara



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

Предыдущее
От: "Marc G. Fournier"
Дата:
Сообщение: Re: pgsql-committers?
Следующее
От: Tom Lane
Дата:
Сообщение: timetz regression test is showing several DST-related failures