Antw: aliases break my query

Поиск
Список
Период
Сортировка
От Gerhard Dieringer
Тема Antw: aliases break my query
Дата
Msg-id s92e3bbc.001@kopo001
обсуждение исходный текст
Список pgsql-sql
Joseph Shraibman wrote:

> These two queries are exactly alike. The first one uses aliases except
> for the order by. The second uses aliases also for the order by. The
> third uses whole names.  The third has the behavior I want.

> Someone please tell me what I am doing wrong. I don't want to have to
> use whole names for my query.

> playpen=> select ta.a,ta.b,ta.c, (select count (tb.zz) where tb.yy =
> ta.a) from tablea ta, tableb tb order by tablea.a;

> playpen=> select ta.a,ta.b,ta.c, (select count (tb.zz) where tb.yy =
> ta.a) from tablea ta, tableb tb order by ta.a;

>playpen=> select tablea.a,tablea.b,tablea.c, (select count (tableb.zz)
> where tableb.yy = tablea.a) order by tablea.a;


I think what you actually want is an outer join:

SELECT  tablea.a, tablea.b, tablea.c, Count(tableb.zz) AS zzcount
FROM tablea LEFT JOIN tableb ON tablea.a = tableb.yy
GROUP BY tablea.a, tablea.b, tablea.c;

that is not supported in postgreSQL 7.0, but can be simulated with 

SELECT  tablea.a, tablea.b, tablea.c, Count(tableb.zz) AS zzcount
FROM tablea INNER JOIN tableb ON tablea.a = tableb.yy
GROUP BY tablea.a, tablea.b, tablea.c
UNION 
SELECT  tablea.a, tablea.b, tablea.c, 0 AS zzcount
FROM tablea
WHERE tablea.a NOT IN (SELECT yy FROM  tableb);

Gerhard




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

Предыдущее
От: Tom Lane
Дата:
Сообщение: Re: aliases break my query
Следующее
От: "Sherril Mathew"
Дата:
Сообщение: A Question