|
Как в запросе использовать другой запрос?
|
|||
---|---|---|---|
#18+
Подскажите, плиз, как в запросе вместо таблицы использовать результаты другого запроса? Например: select * from (select * from table) - не смотрите на логику (ее нет в этом примере :) ), а подскажите, если кто понял вопрос, как правильно организовать такой запрос и возможно ли такое... ... |
|||
:
Нравится:
Не нравится:
|
|||
10.11.2003, 10:52 |
|
Как в запросе использовать другой запрос?
|
|||
---|---|---|---|
#18+
Если у тебя есть таблица "Изделия" (поля имя изделия, класс изделия, 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 а не сказки братьев Гримм ... |
|||
:
Нравится:
Не нравится:
|
|||
10.11.2003, 11:16 |
|
Как в запросе использовать другой запрос?
|
|||
---|---|---|---|
#18+
Мдя... просил на логику не смотреть, так все равно про какие-то сказки братков грят.. :)) Придется описать задачу: есть 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='...') ... |
|||
:
Нравится:
Не нравится:
|
|||
10.11.2003, 11:31 |
|
Как в запросе использовать другой запрос?
|
|||
---|---|---|---|
#18+
в 7.3. пока нормально работает синтаксис SELECT {список вывода} FROM table1, (SELECT ... FROM ...) AS alias1, ... в 7.0. были проблемы с уровнем вложенности и с OUTER JOIN -ами (не понимал он их). ... |
|||
:
Нравится:
Не нравится:
|
|||
10.11.2003, 15:08 |
|
Как в запросе использовать другой запрос?
|
|||
---|---|---|---|
#18+
Не хочет выполнять такой запрос: select distinct on (id1, id2) count(*) from table; - что посоветуете? ... |
|||
:
Нравится:
Не нравится:
|
|||
10.11.2003, 15:16 |
|
Как в запросе использовать другой запрос?
|
|||
---|---|---|---|
#18+
Какова цель этого запроса? ? select id1, id2, count(*) from table group by id1, id2 P.S.: Судья и палач придираются к моему приказу "Казнить нельзя помиловать". Подскажите, куда вставить запятую? ... |
|||
:
Нравится:
Не нравится:
|
|||
10.11.2003, 15:45 |
|
Как в запросе использовать другой запрос?
|
|||
---|---|---|---|
#18+
Не пойму физ смысла запроса: "Выбрать по одной (т.е. первые попавшиеся записи) имеющими уникальные наборы из списка" .. и тут же "кол-во записей"??? "одна запись" - по определению одна (1). какой у нее "каунт" ??? Чего хочется то? ... |
|||
:
Нравится:
Не нравится:
|
|||
10.11.2003, 15:50 |
|
Как в запросе использовать другой запрос?
|
|||
---|---|---|---|
#18+
А, число записей с данными, сгруппированнми по {список полей}? тогда см. <LeXa NalBat> (выше) ... |
|||
:
Нравится:
Не нравится:
|
|||
10.11.2003, 15:54 |
|
Как в запросе использовать другой запрос?
|
|||
---|---|---|---|
#18+
Спасибо Всем, кто мне пытался помочь, сделал. Работает так как хотел. Просто щенячья радость :) Но теперь, вопрос какой вариан работает быстрее (совет типа замерь время ответа не годится, так как не только я сервер юзаю и запрос может простоять в очереди). 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 варианте или сначало объединение, а затем, выборка по условиям? ... |
|||
:
Нравится:
Не нравится:
|
|||
10.11.2003, 16:29 |
|
Как в запросе использовать другой запрос?
|
|||
---|---|---|---|
#18+
Сравните 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) ... |
|||
:
Нравится:
Не нравится:
|
|||
10.11.2003, 18:29 |
|
Как в запросе использовать другой запрос?
|
|||
---|---|---|---|
#18+
Гы... Справочку дали, но сказали, что госпитализация крайне необходима... Гы... ... |
|||
:
Нравится:
Не нравится:
|
|||
11.11.2003, 08:27 |
|
Как в запросе использовать другой запрос?
|
|||
---|---|---|---|
#18+
Кстати простите за глупый вопрос в каких еденицах эксплейн выдает свои результаты? ... |
|||
:
Нравится:
Не нравится:
|
|||
16.11.2003, 09:00 |
|
|
start [/forum/topic.php?fid=53&msg=32318657&tid=2008045]: |
0ms |
get settings: |
10ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
46ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
43ms |
get tp. blocked users: |
1ms |
others: | 331ms |
total: | 464ms |
0 / 0 |