Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / HAVING/WHERE на вложенный запрос / 6 сообщений из 6, страница 1 из 1
28.09.2005, 14:24
    #33293326
Nuclon
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
HAVING/WHERE на вложенный запрос
Не могу сообразить. не работает условие на внутренний запрос. Где то подтормаживаю, подскажите.

Код: plaintext
1.
2.
3.
4.
SELECT table1.id,
   (SELECT sum(table2.qty) from table2 where table2.parent_id=table1.id) as sum_qty
FROM table1
WHERE sum_qty >  1 

ругается:
ERROR: column "sum_qty" does not exist

если WHERE sum_qty поменять на HAVING sum_qty ничего не изменится.
...
Рейтинг: 0 / 0
28.09.2005, 14:39
    #33293395
4321
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
HAVING/WHERE на вложенный запрос
подсказываю
Код: plaintext
1.
2.
3.
4.
SELECT table1.id,
   (SELECT sum(table2.qty) from table2 where table2.parent_id=table1.id) as sum_qty
FROM table1
WHERE (SELECT sum(table2.qty) from table2 where table2.parent_id=table1.id) >  1 
...
Рейтинг: 0 / 0
28.09.2005, 14:46
    #33293426
Nuclon
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
HAVING/WHERE на вложенный запрос
до этого варианта я уже дошел, но мне кажется нехорошо это - использовать один и тот же подзапрос в двух местах - на скорости скажется.
...
Рейтинг: 0 / 0
28.09.2005, 15:52
    #33293668
ilejn
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
HAVING/WHERE на вложенный запрос
Nuclonдо этого варианта я уже дошел, но мне кажется нехорошо это - использовать один и тот же подзапрос в двух местах - на скорости скажется.

Правильно.

Вот такой вариант лучше с точки зрения производительности:

SELECT tid, sum_qty FROM
(
SELECT table1.id as tid,
(SELECT sum(table2.qty) from table2 where table2.parent_id=table1.id) as sum_qty
FROM table1
)
WHERE sum_qty > 1

Я сейчас не очень соображаю, но, кажется,
ничего не мешает написать и так

SELECT table1.id , sum(table2.qty) as sum_qty
from table1, table2 where table2.parent_id=table1.id
and sum_qty > 1
...
Рейтинг: 0 / 0
28.09.2005, 15:59
    #33293692
4321
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
HAVING/WHERE на вложенный запрос
Код: plaintext
1.
2.
3.
4.
5.
SELECT * FROM ( 
SELECT table1.id,
   (SELECT sum(table2.qty) from table2 where table2.parent_id=table1.id) as sum_qty
FROM table1) AS foo
WHERE foo.sum_qty >  1 
попробуйте и сравните.
...
Рейтинг: 0 / 0
28.09.2005, 18:42
    #33294282
mwolf
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
HAVING/WHERE на вложенный запрос
Nuclonдо этого варианта я уже дошел, но мне кажется нехорошо это - использовать один и тот же подзапрос в двух местах - на скорости скажется.

Эээ
А разве оптимизатор не разберёт, что это одно и то же?
...
Рейтинг: 0 / 0
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / HAVING/WHERE на вложенный запрос / 6 сообщений из 6, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]