Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Web программирование > SQL, базы данных
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 16.06.2019, 07:24   #1
polin11
Форумчанин
 
Регистрация: 07.06.2015
Сообщений: 164
По умолчанию SQL запрос с массивами

Использую СУБД postgresql. Помогите написать запрос.
Есть 3 массива со значениями 3 полей таблицы A[a1,a2], B[b1,b2], C[c1,c2] соответственно.
Есть запрос:
Код:
SELECT *
FROM T
WHERE Field1 = a1 AND Field2 = b1 AND Field3 = c1
UNION
SELECT *
FROM T
WHERE Field1 = a2 AND Field2 = b2 AND Field3 = c2
То есть нужно найти все записи, значения полей которых равны наборам из массивов (a[N],b[N],c[N]).
Если массивы большие размером, не хочется лепить запрос через UNION, он выполняется долго и
размер этого запроса большой.
Может быть можно сократить, что-то типа такого
Код:
SELECT *
FROM T
WHERE Field1 = ANY(ARRAY[a1,a2,a3]) AND Field2 = ANY(ARRAY[b1,b2,b3]) AND Field3 = ANY(ARRAY[c1,c2,c3])
Но в таком виде запрос работает неверно, возвращает записи в полях которых входит хотя бы одно значение массива
из каждого массива.
polin11 вне форума Ответить с цитированием
Старый 17.06.2019, 11:19   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Цитата:
Сообщение от polin11 Посмотреть сообщение
Код:
SELECT *
FROM T
WHERE Field1 = a1 AND Field2 = b1 AND Field3 = c1
UNION
SELECT *
FROM T
WHERE Field1 = a2 AND Field2 = b2 AND Field3 = c2
это эквивалентно
Код:
SELECT *
FROM T
WHERE (Field1 = a1 AND Field2 = b1 AND Field3 = c1)
or (Field1 = a2 AND Field2 = b2 AND Field3 = c2)
НО! запрос OR будет работать так же медленно, как и ваш UNION

скорее всего, улучшить ситуацию можно, если к таблице добавить 3 индекса
по полям
Field1
Field2
Field3
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Запрос запрос интервал. a.n.o.n.i.m SQL, базы данных 2 17.02.2018 21:38
Запрос на выборку и отчет на этот запрос Camelot_2012 Microsoft Office Access 2 21.12.2011 16:48
Запрос с CASE переделать в запрос с PIVOT (MS SQL Server 2005) Машуля SQL, базы данных 4 06.05.2010 21:09
запрос ссылается на несвязанный с ним запрос kolebatel SQL, базы данных 0 11.06.2008 12:50