powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Вложенный запрос имеет смысл?
7 сообщений из 7, страница 1 из 1
Вложенный запрос имеет смысл?
    #38493916
seconsultant
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Дано 2 запроса. Первый получает id категории, затем подставляем id для поиска по массиву.

Код: sql
1.
2.
SELECT cat_id FROM b_cat WHERE cat_name = 'ver1';
SELECT * FROM a_data WHERE "arr_cat" @> ARRAY[20];



Имеет смысл объединять запросы в один? Сам я родить объединение не смог. Делал примерно такое:
Код: sql
1.
SELECT * FROM a_data WHERE (SELECT cat_id as id FROM b_cat WHERE cat_name = 'ver1') @> ARRAY[id];


Не могу понять как подставить в arr_cat результат выборки из другой таблицы.
...
Рейтинг: 0 / 0
Вложенный запрос имеет смысл?
    #38493935
Lonepsycho
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
смысл иммеет.

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
SELECT 
  d.*
FROM 
  b_cat AS c
  INNER JOIN
  a_data AS d
    ON c.cat_name = 'ver1' AND
       c.cat_id @> ARRAY[20];



П.С. рекомендация ознакомится со джойнами...
...
Рейтинг: 0 / 0
Вложенный запрос имеет смысл?
    #38494187
LeXa NalBat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
seconsultant,

первый запрос возвращает ровно одну строку?
20 - айдишник категории, найденный первым запросом?
arr_cat - поле в таблице a_data?
...
Рейтинг: 0 / 0
Вложенный запрос имеет смысл?
    #38495483
seconsultant
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
LeXa NalBat,

Все так и есть

Lonepsycho,

спасибо за помощь, запрос составил, но он не использует индексы, может что не так? Другой запрос нормально работает с индексом.

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
EXPLAIN SELECT a.* 
     FROM a_data AS a 
       INNER JOIN b_cat AS b 
         ON b.cat_name = 'ver1' AND b.cat_id = any(ARRAY[a.arr_cat]) OFFSET 1000 LIMIT 10;
                                   QUERY PLAN
---------------------------------------------------------------------------------
 Limit  (cost=2834.10..2862.44 rows=10 width=374)
   ->  Nested Loop  (cost=0.00..361974.27 rows=127721 width=374)
         Join Filter: (b.cat_id = ANY (ARRAY[a.arr_cat]))
         ->  Seq Scan on b_cat b  (cost=0.00..1.59 rows=1 width=4)
               Filter: ((cat_name)::text = 'ver1'::text)
         ->  Seq Scan on a_data a  (cost=0.00..303193.21 rows=2612421 width=374)
(6 rows)
...
Рейтинг: 0 / 0
Вложенный запрос имеет смысл?
    #38495655
Фотография Maxim Boguk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
seconsultantLeXa NalBat,

Все так и есть

Lonepsycho,

спасибо за помощь, запрос составил, но он не использует индексы, может что не так? Другой запрос нормально работает с индексом.

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
EXPLAIN SELECT a.* 
     FROM a_data AS a 
       INNER JOIN b_cat AS b 
         ON b.cat_name = 'ver1' AND b.cat_id = any(ARRAY[a.arr_cat]) OFFSET 1000 LIMIT 10;
                                   QUERY PLAN
---------------------------------------------------------------------------------
 Limit  (cost=2834.10..2862.44 rows=10 width=374)
   ->  Nested Loop  (cost=0.00..361974.27 rows=127721 width=374)
         Join Filter: (b.cat_id = ANY (ARRAY[a.arr_cat]))
         ->  Seq Scan on b_cat b  (cost=0.00..1.59 rows=1 width=4)
               Filter: ((cat_name)::text = 'ver1'::text)
         ->  Seq Scan on a_data a  (cost=0.00..303193.21 rows=2612421 width=374)
(6 rows)



в такой формулировке работать с индексом и не будет
вот так вот попробуйте:
Код: plsql
1.
2.
3.
4.
SELECT a.* 
     FROM a_data AS a 
WHERE 
a.arr_cat @> (SELECT array_agg(cat_id) FROM  b_cat WHERE cat_name = 'ver1')
...
Рейтинг: 0 / 0
Вложенный запрос имеет смысл?
    #38495722
seconsultant
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
работает! спасибо!
...
Рейтинг: 0 / 0
Вложенный запрос имеет смысл?
    #38497633
Lonepsycho
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
seconsultant,

а так не получяем тот же результат? думаю должно работать быстрее, да и с индексами...
Код: sql
1.
2.
3.
4.
5.
6.
7.
SELECT a.* 
FROM a_data AS a 
INNER JOIN b_cat AS b 
ON b.cat_name = 'ver1' AND 
     b.cat_id = a.arr_cat
OFFSET 1000 
LIMIT 10;
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Вложенный запрос имеет смысл?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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