powered by simpleCommunicator - 2.0.56     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Как в запросе использовать другой запрос?
13 сообщений из 13, страница 1 из 1
Как в запросе использовать другой запрос?
    #32318625
Подскажите, плиз, как в запросе вместо таблицы использовать результаты другого запроса?
Например:
select * from (select * from table)
- не смотрите на логику (ее нет в этом примере :) ), а подскажите, если кто понял вопрос, как правильно организовать такой запрос и возможно ли такое...
...
Рейтинг: 0 / 0
Как в запросе использовать другой запрос?
    #32318643
Руслан41
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Если у тебя есть таблица "Изделия" (поля имя изделия, класс изделия, ID класса изделия, Ну и Id самого изделия) и таблица "Классы изделия" по заданному имени класса изделия получить список всех изделий из данного класса можно так
SELECT name FROM izdelie WHERE ClassID = (SELECT id FROM class WHERE name = "Name of class");
а можно еще так
SELECT iz.name AS name FROM izdelie iz, class c WHERE iz.classid = c.id AND c.name = "Name of Class";

Это FAQ а не сказки братьев Гримм
...
Рейтинг: 0 / 0
Как в запросе использовать другой запрос?
    #32318657
Мдя... просил на логику не смотреть, так все равно про какие-то сказки братков грят.. :))
Придется описать задачу: есть 2 таблицы, в таблице А комбинация A.id1 & A.id2 - уникальна, в таблице В - нет, необходимо подсчитать кол-во уникальных комбинаций после объединения... что-то типа этого...
select count(*) from
(select distinct A.id1, A.id2
from A inner join B on A.id1=B.id1 and A.id2=B.id2
where B.name='...')
...
Рейтинг: 0 / 0
Как в запросе использовать другой запрос?
    #32318989
assa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
в 7.3. пока нормально работает синтаксис
SELECT {список вывода}
FROM table1, (SELECT ... FROM ...) AS alias1, ...

в 7.0. были проблемы с уровнем вложенности и с OUTER JOIN -ами (не понимал он их).
...
Рейтинг: 0 / 0
Как в запросе использовать другой запрос?
    #32319012
Не хочет выполнять такой запрос:
select distinct on (id1, id2) count(*) from table;
- что посоветуете?
...
Рейтинг: 0 / 0
Как в запросе использовать другой запрос?
    #32319062
LeXa NalBat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Какова цель этого запроса?

? select id1, id2, count(*) from table group by id1, id2

P.S.: Судья и палач придираются к моему приказу "Казнить нельзя помиловать". Подскажите, куда вставить запятую?
...
Рейтинг: 0 / 0
Как в запросе использовать другой запрос?
    #32319072
assa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не пойму физ смысла запроса:

"Выбрать по одной (т.е. первые попавшиеся записи) имеющими уникальные наборы из списка" .. и тут же "кол-во записей"???

"одна запись" - по определению одна (1). какой у нее "каунт" ???

Чего хочется то?
...
Рейтинг: 0 / 0
Как в запросе использовать другой запрос?
    #32319085
assa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А, число записей с данными, сгруппированнми по {список полей}?
тогда см. <LeXa NalBat> (выше)
...
Рейтинг: 0 / 0
Как в запросе использовать другой запрос?
    #32319161
Спасибо Всем, кто мне пытался помочь, сделал. Работает так как хотел.
Просто щенячья радость :)
Но теперь, вопрос какой вариан работает быстрее (совет типа замерь время ответа не годится, так как не только я сервер юзаю и запрос может простоять в очереди).

1 вариант:
select tab1.id, tab1.name
from tab1 inner join tab2 on tab1.id=tab2.id
where tab1.a=5, tab2.b='str'

2 вариант:
select T1.id, T1.name
from (select tab1.id, tab1.name from tab1 where tab1.a=5) as T1 inner join tab2 on T1.id=tab2.id
where tab2.b='str'

первая таблица tab1 - небольшая и в ней все поля числовые, вторая tab2 - много больше и поиск происходит по текстовым полям.
Объясните, что объединение таблиц происходит сразу с проверкой условия в 1 варианте или сначало объединение, а затем, выборка по условиям?
...
Рейтинг: 0 / 0
Как в запросе использовать другой запрос?
    #32319292
LeXa NalBat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сравните explain-планы ваших запросов. ( Вам же только "справочку" взять - пропустят без "очереди". :)

Еще можно сделать explain analyze.

P.S.:

rpl=# explain select id from bbs_posts, bbs_words, bbs_dictionary where id=psid and bbs_words.wrid=bbs_dictionary.wrid and boardid=1 and word='москв';
NOTICE: QUERY PLAN:

Nested Loop (cost=0.00..70.20 rows=1 width=88)
-> Nested Loop (cost=0.00..64.31 rows=1 width=66)
-> Index Scan using i_bbs_dict_wi on bbs_dictionary (cost=0.00..5.99 rows=1 width=23)
-> Index Scan using i_bbs_words_wt on bbs_words (cost=0.00..58.15 rows=14 width=43)
-> Index Scan using pk_bbs_posts_id on bbs_posts (cost=0.00..5.88 rows=1 width=22)

EXPLAIN
rpl=# explain select id from ( select id from bbs_posts where boardid=1 ) as bbs_posts, bbs_words, ( select wrid from bbs_dictionary where word='москв' ) as bbs_dictionary where id=psid and bbs_words.wrid=bbs_dictionary.wrid;
NOTICE: QUERY PLAN:

Nested Loop (cost=0.00..70.20 rows=1 width=88)
-> Nested Loop (cost=0.00..64.31 rows=1 width=66)
-> Index Scan using i_bbs_dict_wi on bbs_dictionary (cost=0.00..5.99 rows=1 width=23)
-> Index Scan using i_bbs_words_wt on bbs_words (cost=0.00..58.15 rows=14 width=43)
-> Index Scan using pk_bbs_posts_id on bbs_posts (cost=0.00..5.88 rows=1 width=22)

EXPLAIN
rpl=# explain select id from bbs_dictionary join bbs_words using(wrid) join bbs_posts on(id=psid) where boardid=1 and word='москв';
NOTICE: QUERY PLAN:

Nested Loop (cost=0.00..70.20 rows=1 width=88)
-> Nested Loop (cost=0.00..64.31 rows=1 width=66)
-> Index Scan using i_bbs_dict_wi on bbs_dictionary (cost=0.00..5.99 rows=1 width=23)
-> Index Scan using i_bbs_words_wt on bbs_words (cost=0.00..58.15 rows=14 width=43)
-> Index Scan using pk_bbs_posts_id on bbs_posts (cost=0.00..5.88 rows=1 width=22)

EXPLAIN
rpl=# explain select id from ( select wrid from bbs_dictionary where word='москв' ) as bbs_dictionary join bbs_words using(wrid) join ( select id from bbs_posts where boardid=1 ) as bbs_posts on(id=psid);
NOTICE: QUERY PLAN:

Nested Loop (cost=0.00..70.20 rows=1 width=88)
-> Nested Loop (cost=0.00..64.31 rows=1 width=66)
-> Index Scan using i_bbs_dict_wi on bbs_dictionary (cost=0.00..5.99 rows=1 width=23)
-> Index Scan using i_bbs_words_wt on bbs_words (cost=0.00..58.15 rows=14 width=43)
-> Index Scan using pk_bbs_posts_id on bbs_posts (cost=0.00..5.88 rows=1 width=22)

EXPLAIN
rpl=# explain select id from bbs_posts join bbs_words on(id=psid) join bbs_dictionary using(wrid) where boardid=1 and word='москв';
NOTICE: QUERY PLAN:

Nested Loop (cost=8319.83..8569.49 rows=1 width=88)
-> Index Scan using i_bbs_dict_wi on bbs_dictionary (cost=0.00..5.99 rows=1 width=23)
-> Materialize (cost=8538.92..8538.92 rows=1966 width=65)
-> Merge Join (cost=8319.83..8538.92 rows=1966 width=65)
-> Sort (cost=22.74..22.74 rows=15 width=22)
-> Seq Scan on bbs_posts (cost=0.00..22.45 rows=15 width=22)
-> Sort (cost=8297.09..8297.09 rows=77788 width=43)
-> Seq Scan on bbs_words (cost=0.00..1977.88 rows=77788 width=43)

EXPLAIN
rpl=# explain select id from ( select id from bbs_posts where boardid=1 ) as bbs_posts join bbs_words on(id=psid) join ( select wrid from bbs_dictionary where word='москв' ) as bbs_dictionary using(wrid);
NOTICE: QUERY PLAN:

Nested Loop (cost=8319.83..8569.49 rows=1 width=88)
-> Index Scan using i_bbs_dict_wi on bbs_dictionary (cost=0.00..5.99 rows=1 width=23)
-> Materialize (cost=8538.92..8538.92 rows=1966 width=65)
-> Merge Join (cost=8319.83..8538.92 rows=1966 width=65)
-> Sort (cost=22.74..22.74 rows=15 width=22)
-> Seq Scan on bbs_posts (cost=0.00..22.45 rows=15 width=22)
-> Sort (cost=8297.09..8297.09 rows=77788 width=43)
-> Seq Scan on bbs_words (cost=0.00..1977.88 rows=77788 width=43)

EXPLAIN
rpl=# select version();
version
-------------------------------------------------------------
PostgreSQL 7.2.3 on i686-pc-linux-gnu, compiled by GCC 2.96
(1 row)
...
Рейтинг: 0 / 0
Как в запросе использовать другой запрос?
    #32319512
Гы... Справочку дали, но сказали, что госпитализация крайне необходима... Гы...
...
Рейтинг: 0 / 0
Как в запросе использовать другой запрос?
    #32325559
Heckfy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кстати простите за глупый вопрос
в каких еденицах эксплейн выдает свои результаты?
...
Рейтинг: 0 / 0
Как в запросе использовать другой запрос?
    #32326036
LeXa NalBat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cost? В миллисекундах.
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Как в запросе использовать другой запрос?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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