Как получить каждый первый результат запроса select в цикле, повторяющемся по массиву строк? - PullRequest
0 голосов
/ 15 мая 2018

У меня есть таблица (например, Users) в базе данных PostgreSQL. Его размер относительно большой (около 4 ГБ данных), и я хотел бы получить таблицу / результат, состоящий из отдельных строк, выполняющих запрос select. Этот запрос должен быть выполнен для каждого элемента в массиве строк (пара десятков элементов).

Пример одиночного выбора для одного элемента:

SELECT * FROM "Users" WHERE "Surname" LIKE 'Smith%' LIMIT 1

Значение между ' и %' должно быть элементом входного массива.

РЕДАКТИРОВАТЬ: Мне не важно, получаю ли я запись № 1 или 2 для LIKE 'Smith%'

Как мне этого добиться? Я пытался добавить результаты запроса к некоторой переменной массива в цикле FOREACH, но безуспешно.

Пример исходной таблицы:

| Id    | Name      | Surname   |
|----   |--------   |---------- |
| 1     | John      | Smiths    |
| 2     | Adam      | Smith     |
| 3     | George    | Kowalsky  |
| 4     | George    | Kowalsky  |
| 5     | Susan     | Connor    |
| 6     | Clare     | Connory   |
| 7     | Susan     | Connor    |

А для ['Smith', 'Connor'] вывод:

| Id | Name  | Surname |
|----|-------|---------|
| 1  | John  | Smiths  |
| 5  | Susan | Connor  |

Ответы [ 2 ]

0 голосов
/ 15 мая 2018

В Postgres вы можете использовать оператор ANY для сравнения одного значения со всеми значениями массива. Это также работает вместе с оператором LIKE.

SELECT * 
FROM "Users" 
WHERE "Surname" like ANY (array['Smith%', 'Connor%'])

Обратите внимание, что LIKE чувствителен к регистру, если вы не хотите этого, вы можете использовать ILIKE

0 голосов
/ 15 мая 2018

Это покажет вам логику.Синтаксис зависит от вас.

where 1 = 2 
start of loop
or surname like 'Array Element goes here%'
end of loop
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...