如何在循环迭代字符串数组中获取select查询的每个第一个结果?

时间:2018-05-15 11:14:32

标签: sql postgresql

我在PostgreSQL数据库中有一个表(例如Users)。它的大小相对较大(约4 GB的数据),我希望得到一个表/结果,包含满足select查询的单行。应该对字符串数组中的每个元素执行此查询(几十个元素)。

单个选择一个元素的示例:

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

'%'之间的值应该是输入数组的元素。

编辑:对我来说,无论是否记录都不重要。 LIKE 'Smith%'

的1或2

我怎样才能做到这一点? 我试图将查询结果附加到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 :(得分:2)

在Postgres中,您可以使用ANY运算符将单个值与数组的所有值进行比较。这也与LIKE运算符一起使用。

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

请注意LIKE区分大小写,如果您不想这样,可以使用ILIKE

答案 1 :(得分:-1)

这将向您显示逻辑。语法取决于你。

where 1 = 2 
start of loop
or surname like 'Array Element goes here%'
end of loop